VHVlIFNlcCAxNiAxMDoxODoyMiAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIFZlcnNpb24gMy43NiByZWxlYXNlZC4KClR1ZSBTZXAgIDIgMTA6MDc6MzkgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pOiBXaGVuIHByb2Nlc3NpbmcgJChzaGVsbC4uLikKICAJdHJhbnNsYXRlIGEgQ1JMRiAoXHJcbikgc2VxdWVuY2UgYXMgd2VsbCBhcyBhIG5ld2xpbmUgKFxuKSB0byBhCiAJc3BhY2UuICBBbHNvIHJlbW92ZSBhbiBlbmRpbmcgXHJcbiBzZXF1ZW5jZS4KCSogbWFrZS50ZXhpbmZvIChTaGVsbCBGdW5jdGlvbik6IERvY3VtZW50IGl0LgoKRnJpIEF1ZyAyOSAxMjo1OTowNiAxOTk3ICBSb2IgVHVsbG9oICA8cm9iX3R1bGxvaEB0aXZvbGkuY29tPgoKCSogdzMyL3BhdGhzdHVmZi5jIChjb252ZXJ0X1BhdGhfdG9fd2luZG93czMyKTogRml4IHByb2JsZW0gd2hlcmUKIAlwYXRocyB3aGljaCBjb250YWluIHNpbmdsZSBjaGFyYWN0ZXIgZW50cmllcyBsaWtlIGAuJyBhcmUgbm90CiAJaGFuZGxlZCBjb3JyZWN0bHkuCgoJKiBSRUFETUUuVzMyOiBEb2N1bWVudCBwYXRoIGhhbmRsaW5nIGlzc3VlcyBvbiBXaW5kb3dzIHN5c3RlbXMuCgpGcmkgQXVnIDI5IDAyOjAxOjI3IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogVmVyc2lvbiAzLjc1LjkzLgoKVGh1IEF1ZyAyOCAxOTozOTowNiAxOTk3ICBSb2IgVHVsbG9oICA8cm9iX3R1bGxvaEB0aXZvbGkuY29tPgoKCSogam9iLmMgKGV4ZWNfY29tbWFuZCk6IFtXSU5ET1dTMzJdIElmIGV4ZWNfY29tbWFuZCgpIGlzIGludm9rZWQKIAlmcm9tIG1haW4oKSB0byByZS1leGVjIG1ha2UsIHRoZSBjYWxsIHRvIGV4ZWN2cCgpIHdvdWxkCiAJaW5jb3JyZWN0bHkgcmV0dXJuIGNvbnRyb2wgdG8gcGFyZW50IHNoZWxsIGJlZm9yZSB0aGUgZXhlYydlZAogCWNvbW1hbmQgY291bGQgcnVuIHRvIGNvbXBsZXRpb24uIEkgYmVsaWV2ZSB0aGlzIGlzIGEgZmVhdHVyZSBvZgogCXRoZSB3YXkgdGhhdCBleGVjdnAoKSBpcyBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgV0lOMzIgQVBJcy4gVG8KIAlhbGxldmlhdGUgdGhlIHByb2JsZW0sIHVzZSB0aGUgc3VwcGxpZWQgcHJvY2VzcyBsYXVuY2ggZnVuY3Rpb24gaW4KIAl0aGUgc3ViX3Byb2MgbGlicmFyeSBhbmQgc3VzcGVuZCB0aGUgcGFyZW50IHByb2Nlc3MgdW50aWwgdGhlCiAJY2hpbGQgcHJvY2VzcyBoYXMgcnVuLiAgV2hlbiB0aGUgY2hpbGQgZXhpdHMsIGV4aXQgdGhlIHBhcmVudCBtYWtlCiAJd2l0aCB0aGUgZXhpdCBjb2RlIG9mIHRoZSBjaGlsZCBtYWtlLgoKVGh1IEF1ZyAyOCAxNzowNDo0NyAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIE1ha2VmaWxlLkRPUy50ZW1wbGF0ZSAoZGlzdGRpcik6IEZpeCBhIGxpbmUgdGhhdCBnb3Qgd3JhcHBlZCBpbgoJZW1haWwuCgoJKiBNYWtlZmlsZS5hbSAobG9hZGF2Zyk6IEdpdmUgdGhlIG5lY2Vzc2FyeSBjbWRsaW5lIG9wdGlvbnMgd2hlbgoJbGlua2luZyBsb2FkYXZnLgoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3IgcHN0YXRfZ2V0ZHluYW1pYyBmb3IgZ2V0bG9hZHZnIG9uIEhQLgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogW1ZNUyxfQU1JR0FdIERvbid0IHBlcmZvcm0gZW1wdHkKCWNvbW1hbmQgb3B0aW1pemF0aW9uIG9uIHRoZXNlIHN5c3RlbXM7IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZS4KCldlZCBBdWcgMjcgMTc6MDk6MzIgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgogICAgICAgICogVmVyc2lvbiAzLjc1LjkyCgpUdWUgQXVnIDI2IDExOjU5OjE1IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogbWFpbi5jIChwcmludF92ZXJzaW9uKTogQWRkICc5NyB0byBjb3B5cmlnaHQgeWVhcnMuCgoJKiByZWFkLmMgKGRvX2RlZmluZSk6IENoZWNrIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IGJlZm9yZSBsb29raW5nCglhdCBhIHBhcnRpY3VsYXIgb2Zmc2V0LgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBFeGFtaW5lIHRoZSBsYXN0IGJ5dGUKCW9mIHRoZSBwcmV2aW91cyBhcmcsIG5vdCB0aGUgYnl0ZSBhZnRlciB0aGF0LgoKU2F0IEF1ZyAyMyAxOTk3ICBFbGkgWmFyZXRza2lpICA8ZWxpekBpcy5lbHRhLmNvLmlsPgoKCSogTWFrZWZpbGUuRE9TLnRlbXBsYXRlOiBOZXcgZmlsZSAoY29udmVydGVkIHRvIE1ha2VmaWxlLkRPUyBpbgoJdGhlIGRpc3RyaWJ1dGlvbikuCgoJKiBjb25maWd1cmUuYmF0OiBSZXdyaXRlIHRvIHVzZSBNYWtlZmlsZS5ET1MgaW5zdGVhZCBvZiBlZGl0aW5nCiAgICAgICAgTWFrZWZpbGUuaW4uICBBZGQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgZnJvbSBvdXRzaWRlIG9mIHRoZSBzb3VyY2UKICAgICAgICBkaXJlY3RvcnkuICBGYWlsIGlmIHRoZSBlbnZpcm9ubWVudCBibG9jayBpcyB0b28gc21hbGwuCgoJKiBjb25maWdoLmRvczogVXNlIDxzeXMvY29uZmlnLmg+LgoKCSogUkVBRE1FLkRPUzogVXBkYXRlIGluc3RydWN0aW9ucy4KCkZyaSBBdWcgMjIgMTk5NyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFtfX01TRE9TX19dIERvbid0IHRlc3QgZm9yICIvYmluL3NoIgogICAgICAgIGxpdGVyYWxseSwgdXNlIHZhbHVlIG9mIHVuaXh5X3NoZWxsIGluc3RlYWQuCgoJKiBmaWxlZGVmLmggKE5FV19NVElNRSk6IFVzZSAxIGxlc3MgdGhhbiBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlIGlmCiAgICAgICAgdGltZV90IGlzIHVuc2lnbmVkLgoKU2F0IEF1ZyAxNiAwMDo1NjoxNSAxOTk3ICBKb2huIFcuIEVhdG9uICA8andlQGJldm8uY2hlLndpc2MuZWR1PgoKICAgICAgICAqIHZtc2lmeS5jICh2bXNpZnksIGNhc2UgMTEpOiBBZnRlciB0cmFuc2xhdGluZyBgLi4nIGVsZW1lbnRzLCBzZXQKICAgICAgICBuc3RhdGUgdG8gTl9PUEVOIGlmIHRoZXJlIGFyZSBzdGlsbCBtb3JlIGVsZW1lbnRzIHRvIHByb2Nlc3MuCiAgICAgICAgKHZtc2lmeSwgY2FzZSAyKTogQWZ0ZXIgdHJhbnNsYXRpbmcgYGZvby9iYXInIHVwIHRvIHRoZSBzbGFzaCwKICAgICAgICBzZXQgbnN0YXRlIHRvIE5fT1BFTiwgbm90IE5fRE9ULgoKRnJpIEF1ZyAgOCAxNToxODowOSAxOTk3ICBKb2huIFcuIEVhdG9uICA8andlQGJldm8uY2hlLndpc2MuZWR1PgoKICAgICAgICAqIGRpci5jICh2bXNzdGF0X2Rpcik6IExlYXZlIG5hbWUgdW5tb2RpZmllZCBvbiBleGl0LgogICAgICAgICogbWFrZS5oIChQQVRIX1NFUEFSQVRPUl9DSEFSKTogU2V0IHRvIGNvbW1hIGZvciBWTVMuCiAgICAgICAgKiB2cGF0aC5jOiBGaXggY29tbWVudHMgdG8gcmVmZXIgdG8gcGF0aCBzZXBhcmF0b3IsIG5vdCBjb2xvbi4KICAgICAgICAoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IEF2b2lkIFVuaXh5IHNsYXNoIGhhbmRsaW5nIGZvciBWTVMuCgpUaHUgQXVnICA3IDIyOjI0OjAzIDE5OTcgIEpvaG4gVy4gRWF0b24gIDxqd2VAYmV2by5jaGUud2lzYy5lZHU+CgoJKiBhci5jOiBbVk1TXSBEb24ndCBkZWNsYXJlIGFyX21lbWJlcl90b3VjaC4KCURlbGV0ZSBWTVMgdmVyc2lvbiBvZiBhcl9tZW1iZXJfZGF0ZS4KCUVuYWJsZSBub24tVk1TIHZlcnNpb25zIG9mIGFyX21lbWJlcl9kYXRlIGFuZCBhcl9tZW1iZXJfZGF0ZV8xIGZvcgoJVk1TIHRvby4KCSogYXJzY2FuLmMgKFZNU19nZXRfbWVtYmVyX2luZm8pOiBOZXcgZnVuY3Rpb24uCgkoYXJfc2Nhbik6IFByb3ZpZGUgdmVyc2lvbiBmb3IgVk1TIHN5c3RlbXMuCgkoYXJfbmFtZV9lcXVhbCk6IFNpbXBseSBjb21wYXJlIG5hbWUgYW5kIG1lbSBvbiBWTVMgc3lzdGVtcy4KCURvbid0IGRlZmluZSBhcl9tZW1iZXJfcG9zIG9yIGFyX21lbWJlcl90b3VjaCBvbiBWTVMgc3lzdGVtcy4KCgkqIGNvbmZpZy5oLXZtcyAocGlkX3QsIHVpZF90KTogRG9uJ3QgZGVmaW5lLgoKCSogcmVtYWtlLmM6IERlbGV0ZSBkZWNsYXJhdGlvbiBvZiB2bXNfc3RhdC4KCShuYW1lX210aW1lKTogRG9uJ3QgY2FsbCB2bXNfc3RhdC4KCShmX210aW1lKTogW1ZNU10gRnVua3kgdGltZSB2YWx1ZSBtYW5pcHVsYXRpb24gbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KCgkqIGZpbGUuYyAocHJpbnRfZmlsZSk6IFtWTVNdIFVzZSBjdGltZSwgbm90IGN2dF90aW1lLgoKCSogbWFrZS5oOiBbVk1TXSBEb24ndCBkZWZpbmUgUE9TSVguCgoJKiBtYWtlZmlsZS5jb20gKGZpbGVsaXN0KTogSW5jbHVkZSBhciBhbmQgYXJzY2FuLgoJQWxzbyBpbmNsdWRlIHRoZW0gaW4gdGhlIGxpbmsgY29tbWFuZHMuCglEb24ndCBkZWZpbmUgTk9fQVJDSElWRVMgaW4gY2MgY29tbWFuZC4KCgkqIG1ha2VmaWxlLnZtcyAoQVJDSElWRVMsIEFSQ0hJVkVTX1NSQyk6IFVuY29tbWVudC4KCShkZWZpbmVzKTogRGVsZXRlIE5PX0FSQ0hJVkVTIGZyb20gbGlzdC4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogT25seSBjaGVjayB0byBzZWUgaWYgaW50ZXJtZWRpYXRlIGZpbGUgaXMKCW91dCBvZiBkYXRlIGlmIGl0IGFsc28gZXhpc3RzIChpLmUuLCBtdGltZSAhPSAodGltZV90KSAtMSkuCgoJKiB2bXNkaXIuaCAodV9sb25nLCB1X3Nob3J0KTogU2tpcCB0eXBlZGVmcyBpZiB1c2luZyBERUMgQy4KCkZyaSBKdW4gMjAgMjM6MDI6MDcgMTk5NyAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAdGl2b2xpLmNvbT4KCgkqIHczMi9zdWJwcm9jL3N1Yl9wcm9jLmM6IEdldCBXMzIgc3ViX3Byb2MgdG8gaGFuZGxlIHNoZWJhbmcKCSgjIS9iaW4vc2gpIGluIHNjcmlwdCBmaWxlcyBjb3JyZWN0bHkuCglGaXhlZCBhIGNvdXBsZSBvZiBtZW1vcnkgbGVha3MuCglGaXhlZCBzZWFyY2ggb3JkZXIgaW4gZmluZF9maWxlKCkgKHczMi9zdWJwcm9jL3N1Yl9wcm9jLmMpIHNvIHRoYXQKCWZpbGVzIHdpdGggZXh0ZW5zaW9ucyBhcmUgcHJlZmVycmVkIG92ZXIgZmlsZXMgd2l0aG91dCBleHRlbnNpb25zLgoJQWRkZWQgc2VhcmNoIGZvciBmaWxlcyB3aXRoIC5jbWQgZXh0ZW5zaW9uIHRvby4KCSogdzMyL3N1YnByb2MvbWlzYy5jIChhcnIyZW52YmxrKTogRml4ZWQgbWVtb3J5IGxlYWsuCgpNb24gQXVnIDE4IDA5OjQxOjA4IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogVmVyc2lvbiAzLjc1LjkxCgpGcmkgQXVnIDE1IDEzOjUwOjU0IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogcmVhZC5jIChkb19kZWZpbmUpOiBSZW1lbWJlciB0byBjb3VudCB0aGUgbmV3bGluZSBhZnRlciB0aGUgZW5kZWYuCgpUaHUgQXVnIDE0IDIzOjE0OjM3IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogbWFueTogUmV3cm90ZSBidWlsZHMgdG8gdXNlIEF1dG9tYWtlIDEuMi4KCgkqIEFVVEhPUlM6IE5ldyBmaWxlLgoJKiBtYWludE1ha2VmaWxlOiBDb250YWlucyBtYWludGFpbmVyLW9ubHkgbWFrZSBzbmlwcGV0cy4KCSogR05VbWFrZWZpbGU6IFRoaXMgbm93IG9ubHkgcnVucyB0aGUgaW5pdGlhbCBhdXRvKiB0b29scy4KCSogQ09QWUlORyx0ZXhpbmZvLnRleCxta2luc3RhbGxkaXJzLGluc3RhbGwtc2g6IFJlbW92ZWQgKG9idGFpbmVkCglhdXRvbWF0aWNhbGx5IGJ5IGF1dG9tYWtlKS4KCSogY29tcGF0TWFrZWZpbGU6IFJlbW92ZWQgKG5vdCBuZWVkZWQgYW55bW9yZSkuCgkqIFJFQURNRSxidWlsZC5zaC5pbjogUmVtb3ZlZCAoYnVpbHQgZnJvbSB0ZW1wbGF0ZXMpLgoJKiBjb25maWcuaC5pbixNYWtlZmlsZS5pbjogUmVtb3ZlZCAoYnVpbHQgYnkgdG9vbHMpLgoKV2VkIEF1ZyAxMyAwMjoyMjowOCAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIG1ha2UudGV4aW5mbzogVXBkYXRlcyBmb3IgRE9TL1dpbmRvd3MgaW5mb3JtYXRpb24gKEVsaSBaYXJldHNraWkpCgkqIFJFQURNRSxSRUFETUUuRE9TOiBEaXR0by4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xLGZfbXRpbWUpOiBGaXggR1BBVEggaGFuZGxpbmcuCgkqIHZwYXRoLmMgKGdwYXRoX3NlYXJjaCk6IERpdHRvLgoKCSogZmlsZS5jIChyZW5hbWVfZmlsZSk6IE5ldyBmdW5jdGlvbjogcmVoYXNoLCBidXQgYWxzbyByZW5hbWUgdG8KCXRoZSBoYXNobmFtZS4KCSogZmlsZWRlZi5oOiBEZWNsYXJlIGl0LgoKCSogdmFyaWFibGUuYyAobWVyZ2VfdmFyaWFibGVfc2V0X2xpc3RzKTogUmVtb3ZlIGZyZWUoKSBvZiB2YXJpYWJsZQoJc2V0OyBzaW5jZSB2YXJpb3VzIGZpbGVzIGNhbiBzaGFyZSB2YXJpYWJsZSBzZXRzIHdlIGRvbid0IHdhbnQgdG8KCWZyZWUgdGhlbSBoZXJlLgoKVHVlIEF1ZyAxMiAxMDo1MTo1NCAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogUmVxdWlyZSBhdXRvY29uZiAyLjEyCgoJKiBtYWtlLnRleGluZm86IFJlcGxhY2UgYWxsICJjZCBzdWJkaXI7ICQoTUFLRSkiIGV4YW1wbGVzIHdpdGggYQoJbW9yZSBzdHlsaXN0aWNhbGx5IGNvcnJlY3QgImNkIHN1YmRpciAmJiAkKE1BS0UpIi4KCgkqIG1haW4uYzogR2xvYmFsIHZhcmlhYmxlIGBjbG9ja19za2V3X2RldGVjdGVkJyBkZWZpbmVkLgoJKG1haW4pOiBQcmludCBmaW5hbCB3YXJuaW5nIGlmIGl0J3Mgc2V0LgoJKiBtYWtlLmg6IERlY2xhcmUgaXQuCgkqIHJlbWFrZS5jIChmX210aW1lKTogVGVzdCBhbmQgc2V0IGl0LgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogQWRkIHNwZWNpYWwgb3B0aW1pemF0aW9ucyBmb3IKIAkiZG8tbm90aGluZyIgcnVsZXMsIGNvbnRhaW5pbmcganVzdCB0aGUgc2hlbGwgbm8tb3AgIjoiLiAgVGhpcyBpcwogCXVzZWZ1bCBmb3IgdGltZXN0YW1wIGZpbGVzIGFuZCBjYW4gbWFrZSBhIHJlYWwgZGlmZmVyZW5jZSBpZiB5b3UKIAloYXZlIGEgbG90IG9mIHRoZW0gKHJlcXVlc3RlZCBieSBGZXJndXMgSGVuZGVyc29uIDxmamhAY3MubXUub3ouYXU+KS4KCgkqIGNvbmZpZ3VyZS5pbixNYWtlZmlsZS5pbjogUmV3cm90ZSB0byB1c2UgdGhlIG5ldyBhdXRvY29uZgoJcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSBtYWNyby4KCgkqIGZ1bmN0aW9uLmMgKGZ1bmN0aW9uX3N0cmlwKTogU3RyaXAgbmV3bGluZXMgYXMgd2VsbCBhcyBzcGFjZXMKCWFuZCBUQUJzLgoKRnJpIEp1biAgNiAyMzo0MTowNCAxOTk3ICBSb2IgVHVsbG9oIDxyb2JfdHVsbG9oQHRpdm9saS5jb20+CgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IERhdGVzdGFtcHMgb24gRkFULWJhc2VkIGZpbGVzIGFyZSByb3VuZGVkIHRvCglldmVuIHNlY29uZHMgd2hlbiBzdG9yZWQsIHNvIGlmIHRoZSBkYXRlIGNoZWNrIGZhaWxzIG9uIFdJTkRPV1MzMgoJIHN5c3RlbXMsIHNlZSBpZiB0aGlzICJvZmYtYnktb25lIiBlcnJvciBpcyB0aGUgcHJvYmxlbS4KCgkqIEdlbmVyYWw6IElmIHlvdXIgVFogZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBjb3JyZWN0bHkKCXRoZW4gYWxsIHlvdXIgdGltZXN0YW1wcyB3aWxsIGJlIG9mZiBieSBob3Vycy4gIFNvLCBzZXQgaXQhCgpNb24gQXByICA3IDAyOjA2OjIyIDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogVmVyc2lvbiAzLjc1LjEKCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzKTogRGVmaW5lICYgdXNlIHRoZSAkKEdMT0IpIHZhcmlhYmxlIHNvCgl0aGF0IGl0J3MgcmVtb3ZlZCBjb3JyZWN0bHkgZnJvbSBidWlsZC5zaC5pbiB3aGVuIGl0J3MgYnVpbHQuCgoJKiBjb25maWd1cmUuaW46IE9uIFNvbGFyaXMgd2UgY2FuIHVzZSB0aGUga3N0YXRfKigpIGZ1bmN0aW9ucyB0bwoJZ2V0IGxvYWQgYXZlcmFnZXMgd2l0aG91dCBuZWVkaW5nIHNwZWNpYWwgcGVybWlzc2lvbnMuICBBZGQgYQoJY2hlY2sgZm9yIC1sa3N0YXQgdG8gc2VlIGlmIHdlIGhhdmUgaXQuCgoJKiBnZXRsb2FkYXZnLmMgKGdldGxvYWRhdmcpOiBVc2UgSEFWRV9MSUJLU1RBVCBpbnN0ZWFkIG9mIFNVTjUgYXMKCXRoZSB0ZXN0IHRvIGVuYWJsZSBrc3RhdF9vcGVuKCksIGV0Yy4gcHJvY2Vzc2luZy4KCkZyaSBBcHIgIDQgMjA6MjE6MTggMTk5NyAgRWxpIFphcmV0c2tpaSAgPGVsaXpAaXMuZWx0YS5jby5pbD4KCgkqIDxsb3RzPjogRml4ZXMgdG8gd29yayBpbiB0aGUgREpHUFAgRE9TIGVudmlyb25tZW50LgoKTW9uIE1hciAzMSAwMjo0Mjo1MiAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbik6IEFkZGVkIG5ldyBmdW5jdGlvbiAkKHdvcmRsaXN0KS4KCgkqIG1ha2UudGV4aW5mbyAoRmlsZW5hbWUgRnVuY3Rpb25zKTogRG9jdW1lbnQgJCh3b3JkbGlzdCkgZnVuY3Rpb24uCgoJKiB2cGF0aC5jIChidWlsZF92cGF0aF9saXN0cyk6IENvbnN0cnVjdCB0aGUgR1BBVEggdmFyaWFibGUKCWluZm9ybWF0aW9uIGluIHRoZSBzYW1lIG1hbm5lciB3ZSB1c2VkIHRvIGNvbnN0cnVjdCBWUEFUSC4KCShncGF0aF9zZWFyY2gpOiBOZXcgZnVuY3Rpb24gdG8gc2VhcmNoIEdQQVRILgoKCSogbWFrZS5oOiBEZWNsYXJlIHRoZSBuZXcgZnVuY3Rpb24uCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IENhbGwgaXQsIGFuZCBrZWVwIFZQQVRIIGlmIGl0J3MgZm91bmQuCgoJKiBtYWtlLnRleGluZm8gKFNlYXJjaCBBbGdvcml0aG0pOiBEb2N1bWVudCBHUEFUSCB2YXJpYWJsZS4KClN1biBNYXIgMzAgMjA6NTc6MTYgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBtYWluLmMgKGhhbmRsZV9ub25fc3dpdGNoX2FyZ3VtZW50KTogRGVmaW5lZCB0aGUgTUFLRUNNREdPQUxTCgl2YXJpYWJsZSB0byBjb250YWluIHRoZSB1c2VyIG9wdGlvbnMgcGFzc2VkIGluIG9uIHRoZSBjbWQgbGluZS4KCgkqIG1ha2UudGV4aW5mbyAoR29hbHMpOiBEb2N1bWVudCBNQUtFQ01ER09BTFMgdmFyaWFibGUuCgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IFByaW50IGEgd2FybmluZyBpZiB3ZSBkZXRlY3QgYSBjbG9jayBza2V3CgllcnJvciwgcmF0aGVyIHRoYW4gZmFpbGluZy4KCgkqIG1haW4uYyAobWFpbik6IElmIHdlIHJlYnVpbGQgYW55IG1ha2VmaWxlcyBhbmQgbmVlZCB0byByZS1leGVjLAoJYWRkICItbzxta2ZpbGU+IiBvcHRpb25zIGZvciBlYWNoIG1ha2VmaWxlIHJlYnVpbHQgdG8gYXZvaWQKCWluZmluaXRlIGxvb3BpbmcuCgpGcmkgTWFyIDI4IDE1OjI2OjA1IDE5OTcgIFBhdWwgRC4gU21pdGggIDxwc21pdGhAYmF5bmV0d29ya3MuY29tPgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBUcmFjayB3aGV0aGVyIHRoZSBsYXN0CglhcmcgaW4gdGhlIGNtZCBzdHJpbmcgd2FzIGVtcHR5IG9yIG5vdCAoUm9sYW5kKS4KCShjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogSWYgdGhlIHNoZWxsIGxpbmUgaXMgZW1wdHksCglkb24ndCBkbyBhbnl0aGluZyAoUm9sYW5kKS4KCgkqIGdsb2IvZ2xvYi5oLGdsb2IvZ2xvYi5jLGdsb2IvZm5tYXRjaC5jLGdsb2IvZm5tYXRjaC5oOiBJbnN0YWxsCgl0aGUgbGF0ZXN0IGNoYW5nZXMgZnJvbSB0aGUgR0xJQkMgdmVyc2lvbiBvZiBnbG9iIChVbHJpY2ggRHJlcHBlcikuCgoJKiBnZXRsb2FkYXZnLmMsbWFrZS1zdGRzLnRleGk6IE5ldyB2ZXJzaW9uIChSb2xhbmQpLgoKCSogKEFMTCk6IENoYW5nZWQgV0lOMzIgdG8gVzMyIG9yIFdJTkRPV1MzMiAoUk1TKS4KCk1vbiBNYXIgMjQgMTU6MzM6MzQgMTk5NyAgUm9iIFR1bGxvaCAgPHJvYl90dWxsb2hAdGl2b2xpLmNvbT4KCgkqIFJFQURNRS5XMzI6IERlc2NyaWJlIHByZWxpbWluYXJ5IEZBVCBzdXBwb3J0LgoKCSogYnVpbGRfdzMyLmJhdDogVXNlIGEgdmFyaWFibGUgZm9yIHRoZSBmaW5hbCBleGUgbmFtZS4KCgkqIGRpci5jIChmaW5kX2RpcmVjdG9yeSk6IFczMjogRmluZCB0aGUgZmlsZXN5c3RlbSB0eXBlLgoJKGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wKTogVzMyOiBmb3IgRkFUIGZpbGVzeXN0ZW1zLCBhbHdheXMKCXJlaGFzaCBzaW5jZSBGQVQgZG9lc24ndCBjaGFuZ2UgZGlyZWN0b3J5IG10aW1lIG9uIGNoYW5nZS4KCgkqIG1haW4uYyAoaGFuZGxlX3J1bnRpbWVfZXhjZXB0aW9ucyk6IFczMjogQWRkIGFuCiAJVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyIHNvIHRoYXQgd2hlbiBtYWtlIGJvbWJzIGR1ZSB0byBeQyBvciBhCiAJYnVnLCBpdCB3b24ndCBjYXVzZSBhIEdVSSByZXF1ZXN0b3IgdG8gcG9wIHVwIHVubGVzcyBkZWJ1ZyBpcwogCXR1cm5lZCBvbi4KCShtYWluKTogQ2FsbCBpdC4KCk1vbiBNYXIgMjQgMDA6NTc6MzQgMTk5NyAgUGF1bCBELiBTbWl0aCAgPHBzbWl0aEBiYXluZXR3b3Jrcy5jb20+CgoJKiBjb25maWd1cmUuaW4sIGNvbmZpZy5oLmluLCBjb25maWcuYW1pLCBjb25maWcuaC12bXMsIGNvbmZpZy5oLnczMjoKIAlDaGVjayBmb3IgbWVtbW92ZSgpIGZ1bmN0aW9uLgoKCSogbWFrZS5oIChiY29weSk6IElmIG1lbW1vdmUoKSBhdmFpbGFibGUsIGRlZmluZSBiY29weSgpIHRvIHVzZSBpdC4KCU90aGVyd2lzZSBqdXN0IHVzZSBiY29weSgpLiAgRG9uJ3QgdXNlIG1lbWNweSgpOyBpdCdzIG5vdCBndWFyYW50ZWVkCgl0byBoYW5kbGUgb3ZlcmxhcHBpbmcgbW92ZXMuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBGaXggc29tZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcwoJKHJlcG9ydGVkIGJ5IFB1cmlmeSkuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFVzZSBiY29weSgpIG5vdAoJc3RyY3B5KCk7IHN0cmNweSgpIGlzbid0IGd1YXJhbnRlZWQgdG8gaGFuZGxlIG92ZXJsYXBwaW5nIG1vdmVzLgoKCSogTWFrZWZpbGUuaW46IENoYW5nZSBpbnN0YWxsLWluZm8gb3B0aW9uIGBgLS1pbmZvZGlyJycgdG8KCWBgLS1pbmZvLWRpcicnIGZvciB1c2Ugd2l0aCBuZXcgdGV4aW5mby4KCgkqIGZ1bmN0aW9uLmMgKGV4cGFuZF9mdW5jdGlvbik6ICQoYmFzZW5hbWUpIGFuZCAkKHN1ZmZpeCkgc2hvdWxkCglvbmx5IHNlYXJjaCBmb3Igc3VmZml4ZXMgYXMgZmFyIGJhY2sgYXMgdGhlIGxhc3QgZGlyZWN0b3J5IChlLmcuLAoJb25seSB0aGUgZmluYWwgZmlsZW5hbWUgaW4gdGhlIHBhdGgpLgoKU3VuIE1hciAyMyAwMDoxMzowNSAxOTk3ICBQYXVsIEQuIFNtaXRoICA8cHNtaXRoQGJheW5ldHdvcmtzLmNvbT4KCgkqIG1ha2UudGV4aW5mbzogQWRkIEBkaXJjYXRlZ29yeS9AZGlyZW50cnkgaW5mb3JtYXRpb24uCgkoVG9wKTogUmVtb3ZlIHByZXZpb3VzIHJlZmVyZW5jZSB0byAoZGlyKSAoZnJvbSBSTVMpLgoJKFN0YXRpYyBVc2FnZSk6IEFkZCAiYWxsOiIgcnVsZSB0byBleGFtcGxlLgoJKEF1dG9tYXRpYyBEZXBlbmRlbmNpZXMpOiBmaXggLmQgZmlsZSBjcmVhdGlvbiBleGFtcGxlLgoKCSogSW5zdGFsbCBWUEFUSCsgcGF0Y2g6CgoJKiBmaWxlZGVmLmggKHN0cnVjdCBmaWxlKTogQWRkIGluIGhuYW1lIGZpZWxkIHRvIHN0b3JlIHRoZSBoYXNoZWQKICAgICAgICBmaWxlbmFtZSwgYW5kIGEgZmxhZyB0byByZW1lbWJlciBpZiB3ZSdyZSB1c2luZyB0aGUgdnBhdGggZmlsZW5hbWUKCW9yIG5vdC4gIFJlbmFtZWQgYSBmZXcgZnVuY3Rpb25zIGZvciBtb3JlIGNsYXJpdHkuCgoJKiBmaWxlLmMgKGxvb2t1cF9maWxlLGVudGVyX2ZpbGUsZmlsZV9oYXNoX2VudGVyKTogU3RvcmUgZmlsZW5hbWVzCglpbiB0aGUgaGFzaCB0YWJsZSBiYXNlZCBvbiB0aGVpciAiaGFzaCBuYW1lIi4gIFdlIGNhbiBjaGFuZ2UgdGhpcwoJd2hpbGUga2VlcGluZyB0aGUgb3JpZ2luYWwgdGFyZ2V0IGluICJuYW1lIi4KCShyZWhhc2hfZmlsZSk6IFJlbmFtZWQgZnJvbSAicmVuYW1lX2ZpbGUiIHRvIGJlIG1vcmUgYWNjdXJhdGUuCglDaGFuZ2VzIHRoZSBoYXNoIG5hbWUsIGJ1dCBub3QgdGhlIHRhcmdldCBuYW1lLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBNb2RpZnkgLWQgb3V0cHV0IGZvciBtb3JlIGRldGFpbGVkCiAJVlBBVEggaW5mby4gIElmIHdlIGRvbid0IG5lZWQgdG8gcmVidWlsZCwgdXNlIHRoZSBWUEFUSCBuYW1lLgoJKGZfbXRpbWUpOiBEb24ndCBzZWFyY2ggZm9yIHZwYXRoIGlmIHdlJ3JlIGlnbm9yaW5nIGl0LiAgQ2FsbAogCXJlbmFtZWQgZnVuY3Rpb24gcmVoYXNoX2ZpbGUuICBDYWxsIG5hbWVfbXRpbWUgaW5zdGVhZCBvZgogCWZpbGVfbXRpbWUsIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBzaW5jZSB0aGUgZmlsZSB3YXNuJ3QKIAlhY3R1YWxseSByZW5hbWVkLgoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBpZiB3ZSBmaW5kIGFuIGltcGxpY2l0IGZpbGUgaW4KCVZQQVRILCBzYXZlIHRoZSBvcmlnaW5hbCBuYW1lIG5vdCB0aGUgVlBBVEggbmFtZS4KCgkqIG1ha2UudGV4aW5mbyAoRGlyZWN0b3J5IFNlYXJjaCk6IEFkZCBhIHNlY3Rpb24gb24gdGhlIG5ldyBWUEFUSAoJZnVuY3Rpb25hbGl0eS4KClN1biBEZWMgIDEgMTg6MzY6MDQgMTk5NiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBkaXIuYyAoZmlsZV9leGlzdHNfcCwgZmlsZV9pbXBvc3NpYmxlLCBmaWxlX2ltcG9zc2libGVfcCk6IElmCglkaXJuYW1lIGlzIGVtcHR5IHJlcGxhY2UgaXQgYnkgdGhlIG5hbWUgb2YgdGhlIHJvb3QgZGlyZWN0b3J5LgoJTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB3b3JrICh5ZXQpIGZvciBXMzIsIEFtaWdhLCBvciBWTVMuCgpUdWUgT2N0IDA4IDEzOjU3OjAzIDE5OTYgIFJvYiBUdWxsb2ggIDx0dWxsb2hAdGl2b2xpLmNvbT4KCgkqIG1haW4uYyAobWFpbik6IFczMiBidWcgZml4IGZvciBQQVRIIHZhcnMuCgpUdWUgU2VwIDE3IDE5OTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogZmlsZWRlZi5oIChORVdfTVRJTUUpOiBEb24ndCBhc3N1bWUgdGhhdCB0aW1lX3QgaXMgYSBzaWduZWQKIAkzMi1iaXQgcXVhbnRpdHkuCgoJKiBtYWtlLmg6IChDSEFSX0JJVCwgSU5URUdFUl9UWVBFX1NJR05FRCwgSU5URUdFUl9UWVBFX01BWElNVU0sCiAJSU5URUdFUl9UWVBFX01JTklNVU0pOiBOZXcgbWFjcm9zLgoKVHVlIEF1ZyAyNyAwMTowNjozNCAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBiYWFscGVyYXppbS5mcm9iLmNvbT4KCgkqIFZlcnNpb24gMy43NSByZWxlYXNlZC4KCgkqIG1haW4uYyAocHJpbnRfdmVyc2lvbik6IFByaW50IG91dCBidWctcmVwb3J0aW5nIGFkZHJlc3MuCgpNb24gQXVnIDI2IDE5OjU1OjQ3IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGJhYWxwZXJhemltLmZyb2IuY29tPgoKCSogbWFpbi5jIChwcmludF9kYXRhX2Jhc2UpOiBEb24ndCBkZWNsYXJlIGN0aW1lOyBoZWFkZXJzIGRvIGl0IGZvciB1cwogCWFscmVhZHkuCgpTdW4gSnVsIDI4IDE1OjM3OjA5IDE5OTYgIFJvYiBUdWxsb2ggKHR1bGxvaEB0aXZvbGkuY29tKQoKCSogdzMyL3BhdGhzdHVmZi5jOiBUdXJuZWQgY29udmVydF92cGF0aF90b193MzIoKSBpbnRvIGEKCXJlYWwgZnVuY3Rpb24uIFRoaXMgd2FzIGRvbmUgc28gdGhhdCBWUEFUSCBjb3VsZCBjb250YWluCgl3aGl0ZSBzcGFjZSBzZXBhcmF0ZWQgcGF0aG5hbWVzLiBQbGVhc2Ugbm90ZSB0aGF0IGRpcmVjdG9yeQoJcGF0aHMgKGluIFZQQVRIL3ZwYXRoIGNvbnRleHQpIGNvbnRhaW5pbmcgd2hpdGUgc3BhY2UgYXJlIG5vdAoJc3VwcG9ydGVkIChqdXN0IGFzIHRoZXkgYXJlIG5vdCB1bmRlciBVbml4KS4gU2VlIFJFQURNRS5XMzIKCWZvciBzdWdnZXN0aW9ucy4KCgkqIHczMi9pbmNsdWRlL3BhdGhzdHVmZi5oOiBBZGRlZCBwcm90b3R5cGUgZm9yIHRoZSBuZXcKCWZ1bmN0aW9uIGNvbnZlcnRfdnBhdGhfdG9fdzMyLiBEZWxldGVkIG1hY3JvIGZvciBzYW1lLgoKCSogUkVBRE1FLlczMjogQWRkZWQgc29tZSBub3RlcyBhYm91dCB3aHkgSSBjaG9zZSBub3QgdG8gdHJ5CglhbmQgc3VwcG9ydCBwYXRobmFtZXMgd2hpY2ggY29udGFpbiB3aGl0ZSBzcGFjZSBhbmQgc29tZQoJd29ya2Fyb3VuZCBzdWdnZXN0aW9ucy4KClRodSBKdWwgMjUgMTk6NTM6MzEgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIEdOVW1ha2VmaWxlIChta2RlcC1ub2xpYik6IFVzZSAtTU0gb3B0aW9uIHVuY29uZGl0aW9uYWxseS4KCgkqIFZlcnNpb24gMy43NC43LgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogQmFjayB1cCBQIHRvIHBvaW50IGF0IG51bGwgdGVybWluYXRvcgoJd2hlbiBraWxsaW5nIGZpbmFsIHNwYWNlIGFuZCBkYXNoIGJlZm9yZSBzZXR0aW5nIE1GTEFHUy4KCglGcm9tIFJvYmVydCBIb2VobmUgPHJvYmVydC5ob2VobmVATWF0aGVtYXRpay5UVS1DaGVtbml0ei5ERT46CgkqIGRpci5jIFtfX01TRE9TX19dIFtESkdQUCA+IDFdOiBJbmNsdWRlIDxsaWJjL2Rvc2lvLmg+IGFuZCBkZWZpbgoJYF9fb3BlbmRpcl9mbGFncycgaW5pdGlhbGl6ZWQgdG8gMC4KCVtfX01TRE9TX19dIChkb3NpZnkpIFtESkdQUCA+IDFdOiBSZXR1cm4gbmFtZSB1bmNoYW5nZWQgaWYgX1VTRV9MRk4uCgkoZmluZF9kaXJlY3RvcnkpIFtfX01TRE9TX18gJiYgREpHUFAgPiAxXTogSWYgX1VTRV9MR04sIHNldAoJX19vcGVuZGlyX2ZsYWdzIHRvIF9fT1BFTkRJUl9QUkVTRVJWRV9DQVNFLgoKCSogdm1zZnVuY3Rpb25zLmMgKHZtc19zdGF0KTogYHN5cyRkYXNzZ24gKERldkNoYW4pOycgYWRkZWQgYnkga2thZW1wZi4KCgkqIEdOVW1ha2VmaWxlICh3MzJmaWxlcyk6IEFkZCBOTWFrZWZpbGUuCgoJKiBOTWFrZWZpbGUgKExERkxBR1NfZGVidWcpOiBWYWx1ZSBmaXhlZCBieSB0dWxsb2guCgpTYXQgSnVsIDIwIDEyOjMyOjEwIDE5OTYgIEtsYXVzIEvkbXBmIChra2FlbXBmQHByb2dpcy5kZSkKCgkqIHJlbWFrZS5jIChmX210aW1lKSBbVk1TXTogQWRkIG1pc3NpbmcgYGlmJyBjb25kaXRpb25hbCBmb3IgZnV0dXJlCgltb2R0aW1lIGNoZWNrLgoJKiBjb25maWcuaC12bXMsIG1ha2VmaWxlLnZtcywgcmVhZG1lLnZtcywgdm1zaWZ5LmM6IFVwZGF0ZSBhZGRyZXNzLgoKU2F0IEp1bCAyMCAwNToyOTo0MyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogY29uZmlndXJlLmluOiBSZXF1aXJlIGF1dG9jb25mIDIuMTAgb3IgbGF0ZXIuCgpGcmkgSnVsIDE5IDE2OjU3OjI3IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQuNi4KCgkqIEdOVW1ha2VmaWxlICh3MzJmaWxlcyk6IE5ldyB2YXJpYWJsZS4KCShkaXN0ZmlsZXMpOiBBZGQgaXQuCgkqIHczMjogVXBkYXRlZCBieSBSb2IgVHVsbG9oLgoKCSogbWFrZWZpbGUudm1zIChMT0FETElCRVMpOiBGaXggdHlwby4KClN1biBKdWwgMTQgMTI6NTk6MjcgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogRml4IHVwICNlbHNlLCAjZW5kaWZzLgoKCSogY29uZmlnaC5kb3M6IERlZmluZSBIQVZFX0RJUkVOVF9IIGluc3RlYWQgb2YgRElSRU5ULgoKCSogcmVtYWtlLmMgKGZfbXRpbWUpOiBEb24ndCBjb21wYXJlIE1USU1FIHRvIE5PVyBpZiBNVElNRSA9PSAtMS4KCgkqIFZlcnNpb24gMy43NC41LgoKCSogbWFpbi5jIChtYWluKTogRXhpdCB3aXRoIHN0YXR1cyAyIHdoZW4gdXBkYXRlX2dvYWxfY2hhaW4gcmV0dXJucyAyLgoKU2F0IEp1biAyMiAxNDo1NjowNSAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogY29uZmlndXJlLmluOiBEb24ndCBjaGVjayBmb3IgX3N5c19zaWdsaXN0LgoJKiBtYWtlLmggW0hBVkVfX1NZU19TSUdMSVNUXTogRG9uJ3QgdGVzdCB0aGlzOyBqdXN0IHB1bnQgaWYgdGhlcmUgaXMKCW5vIHN0cnNpZ25hbCBvciBzeXNfc2lnbGlzdC4KCgkqIHJlYWQuYyAoY29uZGl0aW9uYWxfbGluZSk6IFN0cmlwIHdzIGluIGBpZmVxIChhICwgYiknIHNvIGl0IGlzIHRoZQoJc2FtZSBhcyBgaWZlcSAoYSwgYiknLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBEb24ndCBjYWxsIGRpZSBpZiBoYW5kbGluZ19mYXRhbF9zaWduYWwuCgoJKiBmaWxlLmMgKGZpbGVfaGFzaF9lbnRlcik6IEFsbG93IHJlbmFtaW5nIDo6IHRvIDogd2hlbiBsYXR0ZXIgaXMKCW5vbi10YXJnZXQsIG9yIDogdG8gOjogd2hlbiBmb3JtZXIgaXMgbm9uLXRhcmdldC4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IENhbGwgYmxvY2tfc2lncy4KCShibG9ja19zaWdzKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIHN0YXJ0X2pvYl9jb21tYW5kLgoJKHJlYXBfY2hpbGRyZW4pOiBCbG9jayBmYXRhbCBzaWduYWxzIGFyb3VuZCByZW1vdmluZyBkZWFkIGNoaWxkIGZyb20KCWNoYWluIGFuZCBhZGp1c3Rpbmcgam9iX3Nsb3RzX3VzZWQuCgkqIGpvYi5oOiBEZWNsYXJlIGJsb2NrX3NpZ3MuCgoJKiByZW1vdGUtc3R1Yi5jIChyZW1vdGVfc2V0dXAsIHJlbW90ZV9jbGVhbnVwKTogTmV3IChlbXB0eSkgZnVuY3Rpb25zLgoJKiBtYWluLmMgKG1haW4pOiBDYWxsIHJlbW90ZV9zZXR1cC4KCShkaWUpOiBDYWxsIHJlbW90ZV9jbGVhbnVwLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBRdWllc2NlbnQgdmFsdWUgb2Ygc2hlbGxfZnVuY3Rpb25fcGlkIGlzCgl6ZXJvLCBub3QgLTEuCgoJKiBtYWluLmMgKHByaW50X3ZlcnNpb24pOiBBZGQgOTYgdG8gY29weXJpZ2h0IHllYXJzLgoKU2F0IEp1biAxNSAyMDozMDowMSAxOTk2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHJlYWQuYyAoZmluZF9jaGFyX3VucXVvdGUpOiBBdm9pZCBjYWxsaW5nIHN0cmxlbiBvbiBldmVyeSBjYWxsCglqdXN0IHRvIHRocm93IGF3YXkgdGhlIHZhbHVlIG1vc3Qgb2YgdGhlIHRpbWUuCgpTdW4gSnVuICAyIDEyOjI0OjAxIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBQcmVwZW5kICctJyB0byBBUkdWWzFdIGlmIGl0IGNvbnRhaW5zCglubyAnPScsIHJlZ2FyZGxlc3Mgb2YgQVJHQy4KCShkZWZpbmVfbWFrZWZsYWdzKTogRWxpZGUgbGVhZGluZyAnLScgZnJvbSBNQUtFRkxBR1MgdmFsdWUgaWYgZmlyc3QKCXdvcmQgaXMgc2hvcnQgb3B0aW9uLCByZWdhcmRsZXNzIG9mIFdPUkRTLgoKV2VkIE1heSAyMiAxNzoyNDo1MSAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogbWFrZWZpbGUudm1zOiBTZXQgTE9BRExJQkVTLgoJKiBtYWtlZmlsZS5jb20gKGxpbmtfdXNpbmdfbGlicmFyeSk6IEZpeCB0eXBvLgoKV2VkIE1heSAxNSAxNzozNzoyNiAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkZWxhc3lkLmdudS5haS5taXQuZWR1PgoKCSogZGlyLmMgKHByaW50X2Rpcl9kYXRhX2Jhc2UpOiBVc2UgJWxkIGRldiBhbmQgaW5vIGFuZCBjYXN0IHRoZW0gdG8KCWxvbmcuCgpXZWQgTWF5IDE1IDEwOjE0OjE0IENEVCAxOTk2ICBSb2IgVHVsbG9oICA8dHVsbG9oQHRpdm9saS5jb20+CgoJKiBkaXIuYzogVzMyIGRvZXMgbm90IHN1cHBvcnQgaW5vZGUuIEZvciBub3csIGZ1bGx5IHF1YWxpZmllZAoJcGF0aG5hbWUgYWxvbmcgd2l0aCBzdF9tdGltZSB3aWxsIGJlIGtleXMgZm9yIGZpbGVzLgoJRml4ZWQgcHJvYmxlbSB3aGVyZSB2cGF0aCBjYW4gYmUgY29uZnVzZWQgd2hlbiBmaWxlcwoJYXJlIGFkZGVkIHRvIGEgZGlyZWN0b3J5IGFmdGVyIHRoZSBkaXJlY3RvcnkgaGFzIGFscmVhZHkgYmVlbgoJcmVhZCBpbi4gVGhlIGNvZGUgbm93IGF0dGVtcHRzIHRvIHJlcmVhZCB0aGUgZGlyZWN0b3J5IGlmIGl0CglkaXNjb3ZlcnMgdGhhdCB0aGUgZGF0ZXN0YW1wIG9uIHRoZSBkaXJlY3RvcnkgaGFzIGNoYW5nZWQgc2luY2UKCWl0IHdhcyBjYWNoZWQgYnkgbWFrZS4gVGhpcyBwcm9ibGVtIG9ubHkgc2VlbXMgdG8gb2NjdXIgb24gVzMyCglyaWdodCBub3cgc28gaXQgaXMgbHVtcGVkIHVuZGVyIHBvcnQgI2lmZGVmIFdJTkRPV1MzMi4KCgkqIGZ1bmN0aW9uLmM6IFczMjogY2FsbCBzdWJwcm9jIGxpYnJhcnkgKENyZWF0ZVByb2Nlc3MoKSkgaW5zdGVhZCBvZgoJZm9yay9leGVjLgoKCSogam9iLmM6IFczMjogQWRkZWQgdGhlIGNvZGUgdG8gZG8gZm9yay9leGVjL3dhaXRwaWQgc3R5bGUgcHJvY2Vzc2luZwoJb24gVzMyIHN5c3RlbXMgdmlhIGNhbGxzIHRvIHN1YnByb2MgbGlicmFyeS4KCgkqIG1haW4uYzogVzMyOiBTZXZlcmFsIHRoaW5ncyBhZGRlZCBoZXJlLiBGaXJzdCwgdGhlcmUgaXMgY29kZQoJZm9yIGRlYWxpbmcgd2l0aCBQQVRIIGFuZCBTSEVMTCBkZWZhdWx0cy4gTWFrZSB0cmllcyB0byBmaWd1cmUKCW91dCBpZiB0aGUgdXNlciBoYXMgJVBBVEglIHNldCBpbiB0aGUgZW52aXJvbm1lbnQgYW5kIHNldHMgaXQgdG8KCSVQYXRoJSBpZiBpdCBpcyBub3Qgc2V0IGFscmVhZHkuIE1ha2UgYWxzbyBsb29rcyB0byBzZWUgaWYgc2guZXhlCglpcyBhbnl3aGVyZSB0byBiZSBmb3VuZC4gQ29kZSBwYXRoIHRocm91Z2ggam9iLmMgd2lsbCBjaGFuZ2UKCWJhc2VkIG9uIGV4aXN0ZW5jZSBvZiBhIHdvcmtpbmcgQm91cm5lIHNoZWxsLiBUaGUgY2hlY2tpbmcgZm9yCglkZWZhdWx0IHNoZWxsIGlzIGRvbmUgdHdpY2U6IG9uY2UgYmVmb3JlIG1ha2VmaWxlcyBhcmUgcmVhZCBpbgoJYW5kIGFnYWluIGFmdGVyLiBGYWxsIGJhY2sgdG8gTVNET1Mgc3R5bGUgZXhlY3V0aW9uIG1vZGUgaWYgbm8gc2guZXhlCglpcyBmb3VuZC4gQWxzbyBhZGRlZCBzb21lIGRlYnVnIHN1cHBvcnQgdGhhdCBhbGxvd3MgdXNlciB0byBwYXVzZSBtYWtlCgl3aXRoIC1EIHN3aXRjaCBhbmQgYXR0YWNoIGEgZGVidWdnZXIuIFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgZm9yCglkZWJ1Z2dpbmcgcmVjdXJzaXZlIGNhbGxzIHRvIG1ha2Ugd2hlcmUgcHJvYmxlbXMgYXBwZWFyIG9ubHkgaW4gdGhlCglzdWItbWFrZS4KCgkqIG1ha2UuaDogVzMyOiBBIGZldyBtYWNyb3MgYW5kIGhlYWRlciBmaWxlcyBmb3IgVzMyIHN1cHBvcnQuCgoJKiBtaXNjLmM6IFczMjogQWRkZWQgYSBmdW5jdGlvbiBlbmRfb2ZfdG9rZW5fdzMyKCkgdG8gYXNzaXN0CglpbiBwYXJzaW5nIGNvZGUgaW4gcmVhZC5jLgoKCSogcmVhZC5jOiBXMzI6IEZpeGVzIHNpbWlsYXIgdG8gTVNET1Mgd2hpY2ggYWxsb3cgY29sb24gdG8KCWFwcGVhciBpbiBmaWxlbmFtZXMuIFVzZSBvZiBjb2xvbiBpbiBmaWxlbmFtZXMgd291bGQgb3RoZXJ3aXNlCgljb25mdXNlIG1ha2UuCgoJKiByZW1ha2UuYzogVzMyOiBBZGRlZCBpbmNsdWRlIG9mIGlvLmggdG8gZWxpbWluYXRlIGNvbXBpbGVyCgl3YXJuaW5ncy4gQWRkZWQgc29tZSBjb2RlIHRvIGRlZmF1bHQgTElCRElSIGlmIGl0IGlzIG5vdCBzZXQKCW9uIFczMi4KCgkqIHZhcmlhYmxlLmM6IFczMjogQWRkZWQgc3VwcG9ydCBmb3IgZGV0ZWN0aW5nIFBhdGgvUEFUSAoJYW5kIGNvbnZlcnRpbmcgdGhlbSB0byBzZW1pY29sb24gc2VwYXJhdGVkIGxpc3RzIGZvciBtYWtlJ3MKCWludGVybmFsIHVzZS4gTmV3IGZ1bmN0aW9uIHN5bmNfUGF0aF9lbnZpcm9ubWVudCgpCgl3aGljaCBpcyBjYWxsZWQgaW4gam9iLmMgYW5kIGZ1bmN0aW9uLmMgYmVmb3JlIGNyZWF0aW5nIGEgbmV3Cglwcm9jZXNzLiBDYWxsZXIgbXVzdCBzZXQgUGF0aCBpbiBlbnZpcm9ubWVudCBzaW5jZSB3ZSBkb24ndAoJaGF2ZSBmb3JrKCkgdG8gZG8gdGhpcyBmb3IgdXMuCgoJKiB2cGF0aC5jOiBXMzI6IEFkZGVkIGRldGVjdGlvbiBmb3IgZmlsZW5hbWVzIGNvbnRhaW5pbmcKCWZvcndhcmQgb3IgYmFja3dhcmQgc2xhc2hlcy4KCgkqIE5NYWtlZmlsZTogVzMyOiBWaXN1YWwgQyBjb21wYXRpYmxlIG1ha2VmaWxlIGZvciB1c2Ugd2l0aCBubWFrZS4KCVVzZSB0aGlzIHRvIGJ1aWxkIEdOVSBtYWtlIHRoZSBmaXJzdCB0aW1lIG9uIFdpbmRvd3MgTlQgb3IgV2luZG93cyA5NS4KCgkqIFJFQURNRS5XMzI6IFczMjogQ29udGFpbnMgc29tZSBoZWxwZnVsIG5vdGVzLgoKCSogYnVpbGRfdzMyLmJhdDogVzMyOiBJZiB5b3UgZG9uJ3QgbGlrZSBubWFrZSwgdXNlIHRoaXMgdGhlIGZpcnN0Cgl0aW1lIHlvdSBidWlsZCBHTlUgbWFrZSBvbiBXaW5kb3dzIE5UIG9yIFdpbmRvd3MgOTUuCgoJKiBjb25maWcuaC5XMzI6IFczMiB2ZXJzaW9uIG9mIGNvbmZpZy5oCgoJKiBzdWJwcm9jLmJhdDogVzMyOiBBIGJhdCBmaWxlIHVzZWQgdG8gYnVpbGQgdGhlCglzdWJwcm9jIGxpYnJhcnkgZnJvbSB0aGUgdG9wLWxldmVsIE5NYWtlZmlsZS4gTmVlZGVkIGJlY2F1c2UKCVdJbmRvd3MgOTUgKG5tYWtlKSBkb2Vzbid0IGFsbG93IHlvdSB0byBjZCBpbiBhIG1ha2UgcnVsZS4KCgkqIHczMi9pbmNsdWRlL2RpcmVudC5oCgkqIHczMi9jb21wYXQvZGlyZW50LmM6IFczMjogb3BlbmRpciwgcmVhZGRpciwgY2xvc2VkaXIsIGV0Yy4KCgkqIHczMi9pbmNsdWRlL3BhdGhzdHVmZi5oOiBXMzI6IHVzZWQgYnkgZmlsZXMgbmVlZGVkIGZ1bmN0aW9ucwoJZGVmaW5lZCBpbiBwYXRoc3R1ZmYuYyAocHJvdG90eXBlcykuCgoJKiB3MzIvaW5jbHVkZS9zdWJfcHJvYy5oOiBXMzI6IHByb3RvdHlwZXMgZm9yIHN1YnByb2MubGliIGZ1bmN0aW9ucy4KCgkqIHczMi9pbmNsdWRlL3czMmVyci5oOiBXMzI6IHByb3RvdHlwZXMgZm9yIHczMmVyci5jLgoKCSogdzMyL3BhdGhzdHVmZi5jOiBXMzI6IEZpbGUgYW5kIFBhdGgvUGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucy4KCgkqIHczMi9zdWJwcm9jL2J1aWxkLmJhdDogVzMyOiBidWlsZCBzY3JpcHQgZm9yIHN1YnByb2MgbGlicmFyeQoJaWYgeW91IGRvbid0IHdpc2ggdG8gdXNlIG5tYWtlLgoKCSogdzMyL3N1YnByb2MvTk1ha2VmaWxlOiBXMzI6IFZpc3VhbCBDIGNvbXBhdGlibGUgbWFrZWZpbGUgZm9yIHVzZQoJd2l0aCBubWFrZS4gVXNlZCB0byBidWlsZCBzdWJwcm9jIGxpYnJhcnkuCgoJKiB3MzIvc3VicHJvYy9taXNjLmM6IFczMjogc3VicHJvYyBsaWJyYXJ5IHN1cHBvcnQgY29kZQoJKiB3MzIvc3VicHJvYy9wcm9jLmg6IFczMjogc3VicHJvYyBsaWJyYXJ5IHN1cHBvcnQgY29kZQoJKiB3MzIvc3VicHJvYy9zdWJfcHJvYy5jOiBXMzI6IHN1YnByb2MgbGlicmFyeSBzb3VyY2UgY29kZQoJKiB3MzIvc3VicHJvYy93MzJlcnIuYzogVzMyOiBzdWJwcm9jIGxpYnJhcnkgc3VwcG9ydCBjb2RlCgpNb24gTWF5IDEzIDE0OjM3OjQyIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzQuNC4KCgkqIEdOVW1ha2VmaWxlICh2bXNmaWxlcyk6IEZpeCB0eXBvLgoKCSogR05VbWFrZWZpbGUgKGFtaWdhZmlsZXMpOiBBZGQgYW1pZ2EuaC4KClN1biBNYXkgMTIgMTk6MTk6NDMgMTk5NiAgQWFyb24gRGlndWxsYSAgIDxkaWd1bGxhQGZoLWtvbnN0YW56LmRlPgoKCSogZGlyLmM6IE5ldyBmdW5jdGlvbjogYW1pZ2FmeSgpIHRvIGZvbGQgZmlsZW5hbWVzCglDaGFuZ2VzIEhBU0goKSB0byBIQVNISSgpIHRvIGZvbGQgZmlsZW5hbWVzIG9uIEFtaWdhLgoJU3RyaW5nY29tcGFyZXMgdXNlIHN0cmllcSgpIGluc3RlYWQgb2Ygc3RyZXEoKQoJVGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9uIEFtaWdhIGlzICIiIGluc3RlYWQgb2YgIi4iCgkqIGZpbGUuYzogTGlrZXdpc2UuCgoJKiBhbWlnYS5jOiBOZXcgZnVuY3Rpb24gd2lsZGNhcmRfZXhwYW5zaW9uKCkuIEFsbG93cyB0byB1c2UKCUFtaWdhIHdpbGRjYXJkcyB3aXRoICQod2lsZGNhcmQgKQoKCSogYW1pZ2EuaDogTmV3IGZpbGUuIFByb3RvdHlwZXMgZm9yIGFtaWdhLmMKCgkqIGZ1bmN0aW9uLmM6IFVzZSBzcGVjaWFsIGZ1bmN0aW9uIHdpbGRjYXJkX2V4cGFuc2lvbigpIGZvcgoJJCh3aWxkY2FyZCApIHRvIGFsbG93IEFtaWdhIHdpbGRjYXJkcwoJVGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9uIEFtaWdhIGlzICIiIGluc3RlYWQgb2YgIi4iCgoJKiBqb2IuYzogTm8gUGlwZXMgb24gQW1pZ2EsIHRvbwoJKGxvYWRfdG9vX2hpZ2gpIE5laXRoZXIgb24gQW1pZ2EKCUVOViB2YXJpYWJsZSBvbiBBbWlnYSBhcmUgaW4gYSBzcGVjaWFsIGRpcmVjdG9yeSBhbmQgYXJlIG5vdAoJcGFzc2VkIGFzIHRoaXJkIGFyZ3VtZW50IHRvIG1haW4oKS4KCgkqIGpvYi5oOiBObyBlbnZwIG9uIEFtaWdhCgoJKiBtYWtlLmg6IEFkZGVkIEhBU0hJKCkuIFRoaXMgaXMgdGhlIHNhbWUgYXMgSEFTSCgpIGJ1dCBjb252ZXJ0cwoJaXQncyBzZWNvbmQgcGFyYW1ldGVyIHRvIGxvd2VyY2FzZSBvbiBBbWlnYSB0byBmb2xkIGZpbGVuYW1lcy4KCgkqIG1haW4uYzogKG1haW4pLCB2YXJpYWJsZS5jIENoYW5nZWQgaGFuZGxpbmcgb2YgRU5WLXZhcnMuIE1ha2UKCXN0b3JlcyBub3cgdGhlIG5hbWVzIG9mIHRoZSB2YXJpYWJsZXMgb25seSBhbmQgcmVhZHMgdGhlaXIgY29udGVudHMKCXdoZW4gdGhleSBhcmUgYWNjZXNzZWQgdG8gcmVmbGVjdCB0aGF0IHRoZXNlIHZhcmlhYmxlcyBhcmUgcmVhbGx5CglnbG9iYWwgKGllLiB0aGV5IENBTiBjaGFuZ2UgV0hJTEUgbWFrZSBydW5zICEpIFRoaXMgaGFuZGxpbmcgaXMKCW1hZGUgaW4gbG9va3VwX3ZhcmlhYmxlKCkKCgkqIE1ha2VmaWxlLmFtaTogcmVuYW1lZCBmaWxlLmggdG8gZmlsZWRlcC5oCglVcGRhdGVkIGRlcGVuZGVuY2llcwoKCSogcmVhZC5jOiAiZmluZF9zZW1pY29sb24iIGlzIGRlY2xhcmVkIGFzIHN0YXRpYyBidXQgbmV2ZXIgZGVmaW5lZC4KCU5vIGRpZmZlcmVuY2UgYmV0d2VlbiBNYWtlZmlsZSBhbmQgbWFrZWZpbGUgb24gQW1pZ2E7IGFkZGVkCglTTWFrZWZpbGUgdG8gKmRlZmF1bHRfbWFrZWZpbGVzW10uCgkocmVhZF9tYWtlZmlsZSkgU0FTL0Mgd2FudCdzIHR3b19jb2xvbiBhbmQgcGF0dGVybl9wZXJjZW50IGJlIHNldAoJYmVmb3JlIHVzZS4KCVRoZSBjdXJyZW50IGRpcmVjdG9yeSBvbiBBbWlnYSBpcyAiIiBpbnN0ZWFkIG9mICIuIgoJU3RyYW5nZSAjZW5kaWYgbW92ZWQuCgoJKiBSRUFETUUuQW1pZ2E6IHVwZGF0ZWQgZmVhdHVyZSBsaXN0CgoJKiBTTWFrZWZpbGU6IFVwZGF0ZWQgZGVwZW5kZW5jaWVzCgoJKiB2YXJpYWJsZS5jOiBIYW5kbGluZyBvZiBFTlYgdmFyaWFibGUgaGFwcGVucyBpbnNpZGUgbG9va3VwX3ZhcmlhYmxlKCkKClNhdCBNYXkgMTEgMTc6NTg6MzIgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZGVsYXN5ZC5nbnUuYWkubWl0LmVkdT4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogQ291bnQgcGFyZW5zIGluIGxocyB2YXJpYWJsZQoJcmVmcyB0byBhdm9pZCBzZWVpbmcgPS86PS8rPSBpbnNpZGUgYSByZWYuCgpUaHUgTWF5ICA5IDEzOjU0OjQ5IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpIFtTSUdRVUlUXTogTWFrZSBTSUdRVUlUIGNoZWNrCgljb25kaXRpb25hbC4KCgkqIG1haW4uYyAobWFpbik6IFVzZSB1bnNpZ25lZCBmb3IgZnJlYWQgcmV0dXJuLgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFVzZSBgaW50JyBmb3IgY2hhciBhcmcgdG8gYXZvaWQgd2lkZW5pbmcKCWNvbmZsaWN0IGlzc3Vlcy4KCSogZGVwLmg6IEZpeCBwcm90b3R5cGUuCgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24pIFtfQU1JR0FdOiBGaXggc29tZSB0eXBvcy4KCShwYXRzdWJzdF9leHBhbmQpOiBNYWtlIGxlbiB2YXJzIHVuc2lnbmVkLgoKCSogR05VbWFrZWZpbGUgKGdsb2JmaWxlcyk6IEFkZCBBbWlnYURPUyBzdXBwb3J0IGZpbGVzLgoJKGRpc3RmaWxlcyk6IEFkZCAkKGFtaWdhZmlsZXMpLgoJKGFtaWdhZmlsZXMpOiBOZXcgdmFyaWFibGUuCgpUaHUgTm92ICA3IDEwOjE4OjE2IDE5OTUgIEFhcm9uIERpZ3VsbGEgICA8ZGlndWxsYUBmaC1rb25zdGFuei5kZT4KCgkqIEFkZGVkIEFtaWdhIHN1cHBvcnQgaW4gY29tbWFuZHMuYywgZGlyLmMsIGZ1bmN0aW9uLmMsCglqb2IuYywgbWFpbi5jLCBtYWtlLmgsIHJlYWQuYywgcmVtYWtlLmMKCSogY29tbWFuZHMuYzogQW1pZ2EgaGFzIG5laXRoZXIgU0lHSFVQIG5vciBTSUdRVUlUCgkqIGRpci5jOiBBbWlnYSBoYXMgZmlsZW5hbWVzIHdpdGggVXBwZXItIGFuZCBMb3dlcmNhc2UsCglidXQgIkZpbGVOYW1lIiBpcyB0aGUgc2FtZSBhcyAiZmlsZW5hbWUiLiBBZGRlZCBzdHJpZXEoKQoJd2hpY2ggaXMgdXNlIHRvIGNvbXBhcmUgZmlsZW5hbWVzLiBUaGlzIGlzIGxpa2Ugc3RyZXEoKQoJb24gYWxsIG90aGVyIHN5c3RlbXMuIEFsc28gdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcwoJIi4iIHVuZGVyIEFtaWdhRE9TLgoJKiBmdW5jdGlvbi5jOiBPbiBBbWlnYSwgdGhlIGVudmlyb25tZW50IGlzIG5vdCBwYXNzZWQgYXMgZW52cCwKCXRoZXJlIGFyZSBubyBwaXBlcyBhbmQgQW1pZ2EgY2FuJ3QgZm9yay4gVXNlIG15IG93biBmdW5jdGlvbgoJdG8gY3JlYXRlIGEgbmV3IGNoaWxkLgoJKiBqb2IuYzogZGVmYXVsdF9zaGVsbCBpcyAiIiAoVGhlIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGNob29zZXMKCWEgc2hlbGwgZm9yIG1lKS4gSGF2ZSB0byB1c2UgdGhlIHNhbWUgd29ya2Fyb3VuZCBhcyBNU0RPUyBmb3IKCXJ1bm5pbmcgYmF0Y2ggY29tbWFuZHMuIEFkZGVkIEhBVkVfU1lTX1BBUkFNX0guIE5PRklMRSBpc24ndAoJa25vd24gb24gQW1pZ2EuIENsb25lZCBjb2RlIHRvIHJ1biBjaGlsZHJlbiBmcm9tIE1TRE9TLiBPd24KCXZlcnNpb24gb2Ygc2hfY2hhcnNbXSBhbmQgc2hfY21kc1tdLiBObyBkdXAyKCkgb3IgZHVwKCkgb24gQW1pZ2EuCgkqIG1haW4uYzogRm9yY2Ugc3RhY2sgdG8gMjAwMDAgYnl0ZXMuIFJlYWQgZW52aXJvbm1lbnQgZnJvbSBFTlY6CglkZXZpY2UuIE9uIEFtaWdhLCBleGVjX2NvbW1hbmQoKSBkb2VzIHJldHVybiwgc28gSSBleGl0KCkKCWFmdGVyd2FyZHMuCgkqIG1ha2UuaDogQWRkZWQgc3RyaWVxKCkgdG8gY29tcGFyZSBmaWxlbmFtZXMuCgkqIHJlYWQuYzogQW1pZ2EgbmVlZHMgc3BlY2lhbCBleHRlbnNpb24gdG8gaGF2ZSBwYXNzd2QuIE9ubHkKCW9uZSBpbmNsdWRlLWRpci4gIk1ha2VmaWxlIiBhbmQgIm1ha2VmaWxlIiBhcmUgdGhlIHNhbWUuCglBZGRlZCAiU01ha2VmaWxlIi4gIEFkZGVkIHNwZWNpYWwgY29kZSB0byBoYW5kbGUgZGV2aWNlIG5hbWVzICh4eHg6KQoJYW5kICIuLyIgaW4gcnVsZXMuCgkqIHJlbWFrZS5jOiBPbmx5IG9uZSBsaWItZGlyLiBBbWlnYSBsaW5rLWxpYnMgYXJlIG5hbWVkICIlcy5saWIiCglpbnN0ZWFkIG9mICJsaWIlcy5hIi4KCSogbWFpbi5jLCBydWxlLmMsIHZhcmlhYmxlLmM6IEF2b2lkIGZsb2F0cyBhdCBhbGwgY29zdHMuCgkqIHZwYXRoLmM6IEdldCByaWQgb2YgYXMgbWFueSBhbGxvY2EoKXMgYXMgcG9zc2libGUuCgpUaHUgTWF5ICA5IDEzOjIwOjQzIDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGRlbGFzeWQuZ251LmFpLm1pdC5lZHU+CgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBHcm9rIGBzaW5jbHVkZScgYXMgYWxpYXMgZm9yIGAtaW5jbHVkZScuCgpXZWQgTWFyIDIwIDA5OjUyOjI3IDE5OTYgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNoYXJsaWUtYnJvd24uZ251LmFpLm1pdC5lZHU+CgoJKiBHTlVtYWtlZmlsZSAodm1zZmlsZXMpOiBOZXcgdmFyaWFibGUuCgkoZGlzdGZpbGVzKTogSW5jbHVkZSAkKHZtc2ZpbGVzKS4KClR1ZSBNYXIgMTkgMjA6MjE6MzQgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2hhcmxpZS1icm93bi5nbnUuYWkubWl0LmVkdT4KCglNZXJnZWQgVk1TIHBvcnQgZnJvbSBLbGF1cyBLYWVtcGYgPGtrYWVtcGZAZGlkeW11cy5ybWkuZGU+LgoJKiBtYWtlLmggKFBBUkFNUyk6IE5ldyBtYWNyby4KCSogY29uZmlnLmgtdm1zOiBOZXcgZmlsZS4KCSogbWFrZWZpbGUuY29tOiBOZXcgZmlsZS4KCSogbWFrZWZpbGUudm1zOiBOZXcgZmlsZS4KCSogcmVhZG1lLnZtczogTmV3IGZpbGUuCgkqIHZtc2Rpci5oOiBOZXcgZmlsZS4KCSogdm1zZnVuY3Rpb25zLmM6IE5ldyBmaWxlLgoJKiB2bXNpZnkuYzogTmV3IGZpbGUuCgkqIGZpbGUuaDogUmVuYW1lZCB0byBmaWxlZGVmLmggdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBWTVMgc3lzdGVtIGhkci4KCSogYXIuYzogQWRkZWQgcHJvdG90eXBlcyBhbmQgY2hhbmdlcyBmb3IgVk1TLgoJKiBjb21tYW5kcy5jOiBMaWtld2lzZS4KCSogY29tbWFuZHMuaDogTGlrZXdpc2UuCgkqIGRlZmF1bHQuYzogTGlrZXdpc2UuCgkqIGRlcC5oOiBMaWtld2lzZS4KCSogZGlyLmM6IExpa2V3aXNlLgoJKiBleHBhbmQuYzogTGlrZXdpc2UuCgkqIGZpbGUuYzogTGlrZXdpc2UuCgkqIGZ1bmN0aW9uLmM6IExpa2V3aXNlLgoJKiBpbXBsaWNpdC5jOiBMaWtld2lzZS4KCSogam9iLmM6IExpa2V3aXNlLgoJKiBqb2IuaDogTGlrZXdpc2UuCgkqIG1haW4uYzogTGlrZXdpc2UuCgkqIG1ha2UuaDogTGlrZXdpc2UuCgkqIG1pc2MuYzogTGlrZXdpc2UuCgkqIHJlYWQuYzogTGlrZXdpc2UuCgkqIHJlbWFrZS5jOiBMaWtld2lzZS4KCSogcmVtb3RlLXN0dWIuYzogTGlrZXdpc2UuCgkqIHJ1bGUuYzogTGlrZXdpc2UuCgkqIHJ1bGUuaDogTGlrZXdpc2UuCgkqIHZhcmlhYmxlLmM6IExpa2V3aXNlLgoJKiB2YXJpYWJsZS5oOiBMaWtld2lzZS4KCSogdnBhdGguYzogTGlrZXdpc2UuCgkqIGNvbXBhdE1ha2VmaWxlIChzcmNzKTogUmVuYW1lIGZpbGUuaCB0byBmaWxlZGVmLmguCgpTYXQgQXVnIDE5IDIzOjExOjAwIDE5OTUgIFJpY2hhcmQgU3RhbGxtYW4gIDxybXNAbW9sZS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jIChjaGVja19kZXApOiBGb3IgYSBzZWNvbmRhcnkgZmlsZSwgdHJ5IGltcGxpY2l0IGFuZAoJZGVmYXVsdCBydWxlcyBpZiBhcHByb3ByaWF0ZS4KCldlZCBBdWcgIDIgMDQ6Mjk6NDIgMTk5NSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmMgKGNoZWNrX2RlcCk6IElmIGFuIGludGVybWVkaWF0ZSBmaWxlIGV4aXN0cywKCWRvIGNvbnNpZGVyIGl0cyBhY3R1YWwgZGF0ZS4KClN1biBKdWwgMzAgMDA6NDk6NTMgMTk5NSAgUmljaGFyZCBTdGFsbG1hbiAgPHJtc0Btb2xlLmdudS5haS5taXQuZWR1PgoKCSogZmlsZS5oIChzdHJ1Y3QgZmlsZSk6IE5ldyBmaWVsZCBgc2Vjb25kYXJ5Jy4KCSogZmlsZS5jIChzbmFwX2RlcHMpOiBDaGVjayBmb3IgLklOVEVSTUVESUFURSBhbmQgLlNFQ09OREFSWS4KCShyZW1vdmVfaW50ZXJtZWRpYXRlcyk6IERvbid0IGRlbGV0ZSAuU0VDT05EQVJZIGZpbGVzLgoKU2F0IE1hciAgMiAxNjoyNjo1MiAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaGFybGllLWJyb3duLmdudS5haS5taXQuZWR1PgoKCSogY29tcGF0TWFrZWZpbGUgKHNyY3MpOiBBZGQgZ2V0b3B0Lmg7IHByZXBlbmQgJChzcmNkaXIpLyB0byBnZXRvcHQqLgoKRnJpIE1hciAgMSAxMjowNDo0NyAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaGFybGllLWJyb3duLmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjc0LjMuCgoJKiByZW1ha2UuYyAoZl9tdGltZSk6IE1vdmUgZnV0dXJlIG1vZHRpbWUgY2hlY2sgYmVmb3JlIEZJTEUgaXMKCWNsb2JiZXJlZCBieSA6OiBsb29wLgoKCSogZGlyLmM6IFVzZSBjYW5vbmljYWwgY29kZSBmcm9tIGF1dG9jb25mIG1hbnVhbCBmb3IgZGlyZW50IGluY2x1ZGUuCglbX0RfTkFNTEVOXTogUmVkZWZpbmUgTkFNTEVOIHVzaW5nIHRoaXMuCgkoZGlyX2NvbnRlbnRzX2ZpbGVfZXhpc3RzX3ApOiBVc2UgTkFNTEVOIG1hY3JvLgoJKHJlYWRfZGlyc3RyZWFtKSBbX0RJUkVOVF9IQVZFX0RfTkFNTEVOXTogT25seSBzZXQgZF9uYW1sZW4gI2lmIHRoaXMuCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IEFkZCBtaXNzaW5nIGJhY2tzbGFzaC4KCldlZCBGZWIgMjggMDM6NTY6MjAgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2hhcmxpZS1icm93bi5nbnUuYWkubWl0LmVkdT4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF90ZXJtaW5hbF9ydWxlcyk6IFJlbW92ZSArIHByZWZpeCBmcm9tIFJDUyBjbWRzLgoJKGRlZmF1bHRfdmFyaWFibGVzKTogUHV0ICsgcHJlZml4IGluICQoQ0hFQ0tPVVQsdikgdmFsdWUgaW5zdGVhZC4KCgkqIHJlbWFrZS5jIChmX210aW1lKTogQ2hlY2sgZm9yIGZ1dHVyZSB0aW1lc3RhbXBzOyBnaXZlIGVycm9yIGFuZCBtYXJrCglmaWxlIGFzICJmYWlsZWQgdG8gdXBkYXRlIi4KCkZyaSBKYW4gMTIgMTg6MDk6MzYgMTk5NiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jOiBEb24ndCBkZWNsYXJlIHVuYmxvY2tfc2lnczsgam9iLmggYWxyZWFkeSBkb2VzLgoKU2F0IEphbiAgNiAxNjoyNDo0NCAxOTk2ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogYWNjb25maWcuaCAoSEFWRV9TWVNDT05GX09QRU5fTUFYKTogI3VuZGVmIHJlbW92ZWQuCgoJKiBqb2IuYyAoTkdST1VQU19NQVgpOiBEb24ndCB0cnkgdG8gZGVmaW5lIHRoaXMgbWFjcm8uCgpGcmkgRGVjIDIyIDE4OjQ0OjQ0IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb21wYXRNYWtlZmlsZSAoR0VUT1BULCBHRVRPUFRfU1JDLCBHTE9CKTogVmFyaWFibGVzIHJlbW92ZWQuCgkob2Jqcywgc3Jjcyk6IEluY2x1ZGUgdGhlaXIgdmFsdWVzIGhlcmUgaW5zdGVhZCBvZiByZWZlcmVuY2VzLgoKVGh1IERlYyAxNCAwNjoyMToyOSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjc0LjIuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IENhbGwgdW5ibG9ja19zaWdzIGFmdGVyIHN0YXJ0X2pvYl9jb21tYW5kLgoKVGh1IERlYyAxNCAwNzoyMjowMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBkdWFsaXR5LmdudS5haS5taXQuZWR1PgoKCSogZGlyLmMgKGRpcl9zZXR1cF9nbG9iKTogRG9uJ3QgdXNlIGxzdGF0OyBnbG9iIG5ldmVyIGNhbGxzIGl0IGFueXdheS4KCUF2b2lkICYgYmVmb3JlIGZ1bmN0aW9uIG5hbWVzIHRvIHNpbGVuY2UgYm9ndXMgc3Vub3M0IGNvbXBpbGVyLgoKCSogY29uZmlndXJlLmluOiBSZW1vdmUgY2hlY2sgZm9yIGBzeXNjb25mIChfU0NfT1BFTl9NQVgpJy4KClR1ZSBEZWMgMTIgMDA6NDg6NDIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43NC4xLgoKCSogZGlyLmMgKHJlYWRfZGlyc3RyZWFtKTogRml4IGJyYWlubzogZmlsbCBpbiB0aGUgYnVmZmVyIHdoZW4gbm90CglyZWFsbG9jYXRpbmcgaXQhCgpNb24gRGVjIDExIDIyOjI2OjE1IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtaXNjLmMgKGNvbGxhcHNlX2NvbnRpbnVhdGlvbnMpOiBGaXggc2tpcHBpbmcgb2YgdHJhaWxpbmcgXHMgc28KCWl0IGNhbiBuZXZlciBkZXJlZmVyZW5jZSBiZWZvcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkuCgoJKiByZWFkLmMgKGZpbmRfc2VtaWNvbG9uKTogRnVuY3Rpb24gcmVtb3ZlZC4KCShyZWFkX21ha2VmaWxlKTogRG9uJ3QgdXNlIGZpbmRfc2VtaWNvbG9uIG9yIHJlbW92ZV9jb21tZW50cyBmb3IKCXJ1bGUgbGluZXMuICBVc2UgZmluZF9jaGFyX3VucXVvdGUgZGlyZWN0bHkgYW5kIGhhbmRsZSBxdW90ZWQgY29tbWVudHMKCXByb3Blcmx5LgoKCSogZGVmYXVsdC5jOiBSZW1vdmUgYWxsIFtNX1hFTklYXSBjb2RlLgoKCSogZGlyLmMgW0hBVkVfRF9OQU1MRU5dOiBEZWZpbmUgdGhpcyBmb3IgX19HTlVfTElCUkFSWV9fID4gMS4KCShEX05BTUxFTik6IE1hY3JvIHJlbW92ZWQuCgkoRkFLRV9ESVJfRU5UUlkpOiBOZXcgbWFjcm8uCgkoZGlyX2NvbnRlbnRzX2ZpbGVfZXhpc3RzX3ApOiBUZXN0IEhBVkVfRF9OQU1MRU4gaW5zdGVhZCBvZiB1c2luZwoJRF9OQU1MRU4uCgkocmVhZF9kaXJzdHJlYW0pOiBSZXR1cm4gYSBzdHJ1Y3QgZGlyZW50ICogZm9yIG5ldyBnbG9iIGludGVyZmFjZS4KCShpbml0X2Rpcik6IEZ1bmN0aW9uIHJlbW92ZWQuCgkoZGlyX3NldHVwX2dsb2IpOiBOZXcgZnVuY3Rpb24uCgkqIG1haW4uYyAobWFpbik6IERvbid0IGNhbGwgaW5pdF9kaXIuCgkqIHJlYWQuYyAobXVsdGlfZ2xvYik6IENhbGwgZGlyX3NldHVwX2dsb2Igb24gb3VyIGdsb2JfdCBhbmQgdXNlCglHTE9CX0FMVERJUkZVTkMgZmxhZy4KCgkqIG1pc2MuYyAoc2FmZV9zdGF0KTogRnVuY3Rpb24gcmVtb3ZlZC4KCSogcmVhZC5jLCBjb21tYW5kcy5jLCByZW1ha2UuYywgdnBhdGguYzogVXNlIHBsYWluIHN0YXQgaW5zdGVhZCBvZgoJc2FmZV9zdGF0LgoKU2F0IE5vdiAyNSAyMDozNToxOCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogam9iLmMgW0hBVkVfVU5JT05fV0FJVF06IEluY2x1ZGUgc3lzL3dhaXQuaC4KCgkqIG1haW4uYyAobG9nX3dvcmtpbmdfZGlyZWN0b3J5KTogTWFkZSBnbG9iYWwuCglQcmludCBlbnRlcmluZyBtc2cgb25seSBvbmNlLgoJKiBtYWtlLmggKGxvZ193b3JraW5nX2RpcmVjdG9yeSk6IERlY2xhcmUgaXQuCgkqIG1pc2MuYyAobWVzc2FnZSk6IFRha2UgbmV3IGFyZyBQUkVGSVguICBQcmludCAibWFrZTogIiBvbmx5IGlmCglub256ZXJvLiAgQ2FsbCBsb2dfd29ya2luZ19kaXJlY3RvcnkuCgkqIHJlbWFrZS5jOiBQYXNzIG5ldyBhcmcgaW4gYG1lc3NhZ2UnIGNhbGxzLgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBQYXNzIG5ldyBhcmcgdG8gYG1lc3NhZ2UnOyBmaXgKCWludmVydGVkIHRlc3QgaW4gdGhhdCBjYWxsLgoKVHVlIE5vdiAyMSAxOTowMToxMiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogVXNlIGBtZXNzYWdlJyB0byBwcmludCB0aGUgY29tbWFuZCwKCWFuZCBjYWxsIGl0IHdpdGggbnVsbCBpZiB0aGUgY29tbWFuZCBpcyBzaWxlbnQuCgkqIHJlbWFrZS5jICh0b3VjaF9maWxlKTogVXNlIG1lc3NhZ2UgaW5zdGVhZCBvZiBwcmludGYuCgpUdWUgT2N0IDEwIDE0OjU5OjMwIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKGVudGVyX2NvbW1hbmRfbGluZV9maWxlKTogQmFyZiBpZiBOQU1FIGlzICIiLgoKU2F0IFNlcCAgOSAwNjozMzoyMCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEB3aGl6LWJhbmcuZ251LmFpLm1pdC5lZHU+CgoJKiBjb21tYW5kcy5jIChkZWxldGVfdGFyZ2V0KTogSWdub3JlIHVubGluayBmYWlsdXJlIGlmIGl0IGlzIEVOT0VOVC4KClRodSBBdWcgMTcgMTU6MDg6NTcgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgY2hlY2sgZm9yIGdldGR0YWJsZXNpemUuCgkqIGpvYi5jIChnZXRkdGFibGVzaXplKTogUmVtb3ZlIGRlY2xzIGFuZCBtYWNyb3MuCgpUaHUgQXVnIDEwIDE5OjEwOjAzIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBPbWl0IGNvbW1hbmQgbGluZSB2YXJpYWJsZQogCWRlZmluaXRpb25zIGZyb20gTUZMQUdTIHZhbHVlLgoKCSogYXJzY2FuLmMgKGFyX3NjYW4pIFtBSUFNQUddOiBDaGVjayBmb3IgemVybyBNRU1CRVJfT0ZGU0VULAogCWluZGljYXRpbmcgYSB2YWxpZCwgYnV0IGVtcHR5LCBhcmNoaXZlLgoKTW9uIEF1ZyAgNyAxNTo0MDowMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZGlyLmMgKGZpbGVfaW1wb3NzaWJsZV9wKTogQ29ycmVjdGx5IHJlc2V0IEZJTEVOQU1FIHRvIG5hbWUKIAl3aXRoaW4gZGlyZWN0b3J5IGJlZm9yZSBoYXNoIHNlYXJjaC4KCgkqIGpvYi5jIChjaGlsZF9lcnJvcik6IERvIG5vdGhpbmcgaWYgSUdOT1JFRCB1bmRlciAtcy4KCgkqIGpvYi5jIChleGVjX2NvbW1hbmQpOiBDb3JyZWN0bHkgdXNlIEFSR1ZbMF0gZm9yIHNjcmlwdCBuYW1lIHdoZW4KIAlydW5uaW5nIHNoZWxsIGRpcmVjdGx5LgoKVHVlIEF1ZyAgMSAxNDozOToxNCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogam9iLmMgKGNoaWxkX2V4ZWN1dGVfam9iKTogQ2xvc2UgU1RESU5fRkQgYW5kIFNURE9VVF9GRCBhZnRlcgogCWR1cCdpbmcgZnJvbSB0aGVtLiAgRG9uJ3QgdHJ5IHRvIGNsb3NlIGFsbCBleGNlc3MgZGVzY3JpcHRvcnM7CiAJZ2V0ZHRhYmxlc2l6ZSBtaWdodCByZXR1cm4gYSBodWdlIHZhbHVlLiAgQW55IG9wZW4gZGVzY3JpcHRvcnMgaW4KIAl0aGUgcGFyZW50IHNob3VsZCBoYXZlIEZEX0NMT0VYRUMgc2V0LgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogU2V0IEZEX0NMT0VYRUMgZmxhZyBvbiBCQURfU1RESU4gZGVzY3JpcHRvci4KClR1ZSBKdW4gMjAgMDM6NDc6MTUgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlYWQuYyAocmVhZF9hbGxfbWFrZWZpbGVzKTogUHJvcGVybHkgYXBwZW5kIGRlZmF1bHQgbWFrZWZpbGVzCiAJdG8gdGhlIGVuZCBvZiB0aGUgYHJlYWRfbWFrZWZpbGVzJyBjaGFpbi4KCkZyaSBNYXkgMTkgMTY6MzY6MzIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43NCByZWxlYXNlZC4KCldlZCBNYXkgMTAgMTc6NDM6MzQgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43My4zLgoKVHVlIE1heSAgOSAxNzoxNToyMyAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29tcGF0TWFrZWZpbGUgKCQoaW5mb2RpcikvbWFrZS5pbmZvKTogTWFrZSBzdXJlICQkZGlyIGlzIHNldCBpbgogCWluc3RhbGwtaW5mbyBjbWQuCgpXZWQgTWF5ICAzIDE1OjU2OjA2IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBmaWxlLmMgKHByaW50X2ZpbGUpOiBHcm9rIHVwZGF0ZV9zdGF0dXMgb2YgMSBmb3IgLXEuCgpUaHUgQXByIDI3IDEyOjM5OjM1IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzMuMi4KCldlZCBBcHIgMjYgMTc6MTU6NTcgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGZpbGUuYyAocmVtb3ZlX2ludGVybWVkaWF0ZXMpOiBGaXggaW52ZXJ0ZWQgdGVzdCB0byBiYWlsIHVuZGVyCiAJLW4gZm9yIHNpZ25hbCBjYXNlLiAgQmFpbCB1bmRlciAtcSBvciAtdC4KCVNraXAgZmlsZXMgd2l0aCB1cGRhdGVfc3RhdHVzPT0tMS4KCgkqIGpvYi5jIChqb2JfbmV4dF9jb21tYW5kKTogU2tpcCBlbXB0eSBsaW5lcy4KCShuZXdfam9iKTogRG9uJ3QgdGVzdCB0aGUgcmV0dXJuIG9mIGpvYl9uZXh0X2NvbW1hbmQuCglKdXN0IGxldCBzdGFydF93YWl0aW5nX2pvYiBoYW5kbGUgdGhlIGNhc2Ugb2YgZW1wdHkgY29tbWFuZHMuCgpXZWQgQXByIDE5IDAzOjI1OjU0IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBmdW5jdGlvbi5jIFtfX01TRE9TX19dOiBJbmNsdWRlIDxmY250bC5oPi4gIEZyb20gREogRGVsb3JpZS4KCgkqIFZlcnNpb24gMy43My4xLgoKU2F0IEFwciAgOCAxNDo1MzoyNCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogU2V0IEZJTEUtPnVwZGF0ZV9zdGF0dXMgdG8gemVybwogCWlmIGl0J3MgLTEuCgpXZWQgQXByICA1IDAwOjIwOjI0IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzMgcmVsZWFzZWQuCgpUdWUgTWFyIDI4IDEzOjI1OjQ2IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKG1haW4pOiBGaXhlZCBicmFpbm8gaW4gYXNzZXJ0LgoKCSogVmVyc2lvbiAzLjcyLjEzLgoKTW9uIE1hciAyNyAwNToyOToxMiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jOiBBdm9pZCBzdHJpbmcgaW4gYXNzZXJ0IGV4cHJlc3Npb24uICBTb21lIHN5c3RlbXMgYXJlIGJyb2tlbi4KCkZyaSBNYXIgMjQgMDA6MzI6MzIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAobWFpbik6IEhhbmRsZSAxIGFuZCAyIHJldHVybnMgZnJvbSB1cGRhdGVfZ29hbF9jaGFpbgogCW1ha2VmaWxlIHJ1biBwcm9wZXJseS4KCgkqIFZlcnNpb24gMy43Mi4xMi4KCgkqIG1haW4uYyAoaGFuZGxlX25vbl9zd2l0Y2hfYXJndW1lbnQpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKIAlkZWNvZGVfc3dpdGNoZXMuCgkoZGVjb2RlX3N3aXRjaGVzKTogU2V0IG9wdGluZCB0byAwIHRvIHJlaW5pdGlhbGl6ZSBnZXRvcHQsIG5vdCB0byAxLgoJV2hlbiBnZXRvcHRfbG9uZyByZXR1cm5zIEVPRiwgYnJlYWsgdGhlIGxvb3AgYW5kIGhhbmRsZSByZW1haW5pbmcgYXJncwogCXdpdGggYSBzaW1wbGUgc2Vjb25kIGxvb3AuCgoJKiByZW1ha2UuYyAocmVtYWtlX2ZpbGUpOiBTZXQgdXBkYXRlX3N0YXR1cyB0byAyIGluc3RlYWQgb2YgMSBmb3IKIAlubyBydWxlIHRvIG1ha2UuICBNZW50aW9uIHBhcmVudCAoZGVwZW5kZW50KSBpbiBlcnJvciBtZXNzYWdlLgoJKHVwZGF0ZV9maWxlXzEpOiBIYW5kbGUgRklMRS0+dXBkYXRlX3N0YXR1cyA9PSAyIGluIC1kIHByaW50b3V0LgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQsIHJlYXBfY2hpbGRyZW4pOiBTZXQgdXBkYXRlX3N0YXR1cyB0byAyCiAJaW5zdGVhZCBvZiAxIGZvciBmYWlsZWQgY29tbWFuZHMuCgpUdWUgTWFyIDIxIDE2OjIzOjM4IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBqb2IuYyAoc2VhcmNoX3BhdGgpOiBGdW5jdGlvbiByZW1vdmVkICh3YXMgYWxyZWFkeSAjaWYgMCdkIG91dCkuCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIEFDX1RZUEVfR0VUR1JPVVBTOyBub3RoaW5nIG5lZWRzIGl0IGFueSBtb3JlLgoKRnJpIE1hciAxNyAxNTo1Nzo0MCAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29uZmlndXJlLmJhdDogV3JpdGUgQENQUEZMQUdTQCB0cmFuc2xhdGlvbi4KCk1vbiBNYXIgMTMgMDA6NDU6NTkgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpOiBSZWFycmFuZ2VkIGBsKGEgYiknIC0+IGBsKGEpIGwoYiknIGxvb3AKIAl0byBub3Qgc2tpcCB0aGUgZWx0IGltbWVkaWF0ZWx5IHByZWNlZGluZyBgbCguLi4nLgoKRnJpIE1hciAxMCAxMzo1Njo0OSAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLjExLgoKCSogcmVhZC5jIChmaW5kX2NoYXJfdW5xdW90ZSk6IE1ha2Ugc2Vjb25kIGFyZyBhIHN0cmluZyBvZiBzdG9wCiAJY2hhcnMgaW5zdGVhZCBvZiBhIHNpbmdsZSBzdG9wIGNoYXIuICBTdG9wIHdoZW4gYW55IGNoYXIgaW4gdGhlCiAJc3RyaW5nIGlzIGhpdC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoZmluZF9zZW1pY29sb24pOiBQYXNzIHN0b3AgY2hhcnMgIiM7IiB0byBvbmUgZmluZF9jaGFyX3VucXVvdGUgY2FsbCwKCWluc3RlYWQgb2YgdXNpbmcgdHdvIGNhbGxzLiAgSWYgdGhlIG1hdGNoIGlzIG5vdCBhIDsgYnV0IGEgIywKIAlyZXR1cm4gemVyby4KCSogbWlzYy5jOiBDaGFuZ2VkIGZpbmRfY2hhcl91bnF1b3RlIGNhbGxlcnMgaGVyZSB0b28uCgoJKiBWZXJzaW9uIDMuNzIuMTAuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUsIHBhcnNlX2ZpbGVfc2VxKTogRml4IHR5cG8gX19NU19ET1NfXyAtPgogCV9fTVNET1NfXy4KCgkqIEdOVW1ha2VmaWxlIChnbG9iZmlsZXMpOiBBZGQgZ2xvYi9jb25maWd1cmUuYmF0LgoJKGRpc3RmaWxlcyk6IEFkZCBjb25maWdoLmRvcywgY29uZmlndXJlLmJhdC4KCldlZCBNYXIgIDggMTM6MTA6NTcgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCglGaXhlcyBmb3IgTVMtRE9TIGZyb20gREogRGVsb3JpZS4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlLCBwYXJzZV9maWxlX3NlcSkgW19fTVNfRE9TX19dOiBEb24ndCBzZWUgOgogCWFzIHNlcGFyYXRvciBpbiAiQzpcLi4uIi4KCSogY29uZmlnaC5kb3MgKFNURENfSEVBREVSUyk6IERlZmluZSBvbmx5IGlmIHVuZGVmaW5lZC4KCShIQVZFX1NZU19QQVJBTV9IKTogRG9uJ3QgZGVmaW5lIHRoaXMuCgkoSEFWRV9TVFJFUlJPUik6IERlZmluZSB0aGlzLgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCkgW19fTVNET1NfX106IEZpeCB0eXBvcy4KCgkqIFZlcnNpb24gMy43Mi45LgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBSZXNldCBvcHRpbmQgdG8gMSBpbnN0ZWFkIG9mIDAuCgpUdWUgTWFyICA3IDE3OjMxOjA2IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBJZiBub24tb3B0aW9uIGFyZyBpcyAiLSIsIGlnbm9yZSBpdC4KCk1vbiBNYXIgIDYgMjM6NTc6MzggMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi44LgoKV2VkIEZlYiAyMiAyMToyNjozNiAxOTk1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLjcuCgpUdWUgRmViIDIxIDIyOjEwOjQzIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKG1haW4pOiBQYXNzIG1pc3NpbmcgYXJnIHRvIHRtcG5hbS4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHN0cnNpZ25hbC4KCSogam9iLmMgKGNoaWxkX2Vycm9yKTogVXNlIHN0cnNpZ25hbC4KCSogbWFpbi5jIChtYWluKTogRG9uJ3QgY2FsbCBzaWduYW1lX2luaXQgI2lmZGVmIEhBVkVfU1RSU0lHTkFMLgoKCSogbWlzYy5jIChzdHJlcnJvcik6IEZpeCBzd2FwcGVkIGFyZ3MgaW4gc3ByaW50Zi4KCk1vbiBGZWIgMTMgMTE6NTA6MDggMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoQ0ZMQUdTLCBMREZMQUdTKTogRG9uJ3Qgc2V0IHRoZXNlIHZhcmlhYmxlcy4KCkZyaSBGZWIgMTAgMTg6NDQ6MTIgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAocHJpbnRfdmVyc2lvbik6IEFkZCA5NSB0byBjb3B5cmlnaHQgeWVhcnMuCgoJKiBWZXJzaW9uIDMuNzIuNi4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFJlbWVtYmVyIHRvIGNhbGwgbm90aWNlX2ZpbmlzaGVkX2ZpbGUKIAl1bmRlciAtbiB3aGVuIG5vdCByZWN1cnNpbmcuICBUbyBkbyB0aGlzLCBjb25zb2xpZGF0ZSB0aGF0IGNvZGUKIAl1bmRlciB0aGUgZW1wdHkgY29tbWFuZCBjYXNlIGFuZCBnb3RvIHRoZXJlIGZvciB0aGUgLW4gY2FzZS4KClR1ZSBGZWIgIDcgMTM6MzY6MDMgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1ha2UuaCBbISBTVERDX0hFQURFUlNdOiBEb24ndCBkZWNsYXJlIHFzb3J0LiAgU3VuIGhlYWRlcnMKIAlkZWNsYXJlIGl0IGludC4KCk1vbiBGZWIgIDYgMTc6Mzc6MDEgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEZvciBib2d1cyBsaW5lIHN0YXJ0aW5nIHdpdGggdGFiLCBpZ25vcmUKIAlpdCBpZiBibGFuayBhZnRlciByZW1vdmluZyBjb21tZW50cy4KCgkqIG1haW4uYzogQ2FzdCByZXN1bHRzIG9mIGBhbGxvY2EnIHRvIGBjaGFyIConLgoJKiBleHBhbmQuYzogTGlrZXdpc2UuCgpTdW4gRmViICA1IDE4OjM1OjQ2IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuNS4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIG1rdGVtcC4KCSogbWFpbi5jIChtYWluKSBbISBIQVZFX01LVEVNUF06IFVzZSB0bXBuYW0gaW5zdGVhZCBvZiBta3RlbXAuCgoJKiBjb25maWd1cmUuaW4gKG1ha2VfY3Zfc3lzY29uZl9vcGVuX21heCk6IE5ldyBjaGVjayBmb3IgYHN5c2NvbmYKIAkoX1NDX09QRU5fTUFYKScuCgkqIGFjY29uZmlnLmg6IEFkZGVkICN1bmRlZiBIQVZFX1NZU0NPTkZfT1BFTl9NQVguCgkqIGpvYi5jIFtIQVZFX1NZU0NPTkZfT1BFTl9NQVhdIChnZXRkdGFibGVzaXplKTogRGVmaW5lIGFzIG1hY3JvCiAJdXNpbmcgc3lzY29uZi4KCkZyaSBKYW4gMjcgMDQ6NDI6MDkgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogV2hlbiAhTVVTVF9NQUtFLCBkb24ndCBzZXQKIAlGSUxFLT51cGRhdGVfc3RhdHVzIHRvIHplcm8gYmVmb3JlIGNhbGxpbmcgbm90aWNlX2ZpbmlzaGVkX2ZpbGUuCgkobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBUb3VjaCBvbmx5IHdoZW4gRklMRS0+dXBkYXRlX3N0YXR1cyBpcyB6ZXJvLgoJKHJlbWFrZV9maWxlKTogU2V0IEZJTEUtPnVwZGF0ZV9zdGF0dXMgdG8gemVybyBhZnRlciBub3QgY2FsbGluZwoJZXhlY3V0ZV9maWxlX2NvbW1hbmQgYW5kIGRlY2lkaW5nIHRvIHRvdWNoIGluc3RlYWQuCgpUaHUgSmFuIDI2IDAxOjI5OjMyIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKGRlYnVnX3NpZ25hbF9oYW5kbGVyKTogTmV3IGZ1bmN0aW9uOyB0b2dnbGVzIGRlYnVnX2ZsYWcuCgkobWFpbik6IEhhbmRsZSBTSUdVU1IxIHdpdGggdGhhdC4KCk1vbiBKYW4gMTYgMTU6NDY6NTYgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbXBhdE1ha2VmaWxlIChyZWFsY2xlYW4pOiBSZW1vdmUgSW5mbyBmaWxlcy4KClN1biBKYW4gMTUgMDg6MjM6MDkgMTk5NSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi40LgoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogU2F2ZSBhbmQgcmVzdG9yZSBlbnZpcm9uIGFyb3VuZCB2Zm9yawogICAgICAgIGNhbGwuCgkoc2VhcmNoX3BhdGgpOiBGdW5jdGlvbiAjaWYgMCdkIG91dC4KCShleGVjX2NvbW1hbmQpOiBVc2UgZXhlY3ZwIGluc3RlYWQgb2Ygc2VhcmNoX3BhdGguCgoJKiBleHBhbmQuYyAodmFyaWFibGVfZXhwYW5kKTogUmV3cm90ZSBjb21wdXRlZCB2YXJpYWJsZSBuYW1lIGFuZAoJc3Vic3RpdHV0aW9uIHJlZmVyZW5jZSBoYW5kbGluZyB0byBiZSBzaW1wbGVyLiAgRmlyc3QgZXhwYW5kIHRoZQoJZW50aXJlIHRleHQgYmV0d2VlbiB0aGUgcGFyZW5zIGlmIGl0IGNvbnRhaW5zIGFueSAkcywgdGhlbiBleGFtaW5lCgl0aGUgcmVzdWx0IG9mIHRoYXQgZm9yIHN1YnRpdHV0aW9uIHJlZmVyZW5jZXMgYW5kIGRvIG5vIGZ1cnRoZXIKCWV4cGFuc2lvbiB3aGlsZSBwYXJzaW5nIHRoZW0uCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEhhbmRsZSAiIHF1b3RpbmcgdG9vLAoJd2hlbiBubyBiYWNrc2xhc2gsICQgb3IgYCBjaGFyYWN0ZXJzIGFwcGVhciBpbnNpZGUgdGhlIHF1b3Rlcy4KCgkqIGNvbmZpZ3VyZS5pbiAodW5pb24gd2FpdCBjaGVjayk6IElmIFdFWElUU1RBVFVTIGFuZCBXVEVSTVNJRyBhcmUKICAgICAgICBkZWZpbmVkLCBqdXN0IHVzZSBpbnQuCgpUdWUgSmFuIDEwIDA2OjI3OjI3IDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKSBbX19ocHV4XTogUmVtb3ZlIHNwZWNpYWwKCWRlZmluaXRpb24gb2YgQVJGTEFHUy4gIEV4aXN0ZW5jZSBvZiB0aGUgYGYnIGZsYWcgaXMgbm90Cgljb25zaXN0ZW50IGFjcm9zcyBIUFVYIHZlcnNpb25zOyBhbmQgb25lIG1pZ2h0IGJlIHVzaW5nIEdOVSBhcgoJYW55d2F5LgoKCSogY29tcGF0TWFrZWZpbGUgKGNsZWFuKTogRG9uJ3QgcmVtb3ZlIEluZm8gZmlsZXMuCgoJKiBjb21wYXRNYWtlZmlsZSAoY2hlY2spOiBSZW1vdmUgZ3JhdHVpdG91cyB0YXJnZXQgZGVjbGFyYXRpb24uCgpTYXQgSmFuICA3IDExOjM4OjIzIDE5OTUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBjb21wYXRNYWtlZmlsZSAoRVRBR1MsIENUQUdTKTogRG9uJ3QgdXNlIC10LgoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpIFtjcmF5XTogU3VidHJhY3QgMSBsaWtlIFtfX2hwdXhdLgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBGb3IgLS1oZWxwLCBwcmludCB1c2FnZSB0byBzdGRvdXQuCgpNb24gRGVjICA1IDEyOjQyOjE4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBWZXJzaW9uIDMuNzIuMy4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZmlsZV8xKTogRG8gc2V0X2NvbW1hbmRfc3RhdGUgKEZJTEUsCgljc19ub3Rfc3RhcnRlZCkgb25seSBpZiBvbGQgc3RhdGUgd2FzIGRlcHNfcnVubmluZy4KCk1vbiBOb3YgMjggMTQ6MjQ6MDMgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGpvYi5jIChzdGFydF93YWl0aW5nX2pvYik6IFVzZSBzZXRfY29tbWFuZF9zdGF0ZS4KCgkqIGJ1aWxkLnRlbXBsYXRlIChDUFBGTEFHUyk6IE5ldyB2YXJpYWJsZS4KCShwcmVmaXgsIGV4ZWNfcHJlZml4KTogU2V0IGZyb20gQC4uLkAuCgkoY29tcGlsYXRpb24gbG9vcCk6IFBhc3MgJENQUEZMQUdTIHRvIGNvbXBpbGVyLgoKCSogR05VbWFrZWZpbGUgKGJ1aWxkLnNoLmluKTogTWFrZSBpdCBleGVjdXRhYmxlLgoKCSogR05VbWFrZWZpbGUgKGdsb2JmaWxlcyk6IEFkZCBjb25maWd1cmUuaW4sIGNvbmZpZ3VyZS4KCgkqIFZlcnNpb24gMy43Mi4yLgoKCSogY29uZmlndXJlLmluIChBQ19PVVRQVVQpOiBEb24ndCB3cml0ZSBnbG9iL01ha2VmaWxlLgoKCSogY29uZmlndXJlLmluIChBQ19DSEVDS19TWU1CT0wpOiBVc2UgQUNfREVGSU5FX1VOUVVPVEVELgoKCSogY29uZmlndXJlLmluOiBEb24ndCBjaGVjayBmb3IgcmFubGliLgoKVHVlIE5vdiAyMiAyMjo0Mjo0MCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogT25seSBtYXJrIGFsc29fbWFrZSdzIGFzCgl1cGRhdGVkIGlmIHJlYWxseSByYW4gY21kcy4KClR1ZSBOb3YgMTUgMDY6MzI6NDYgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogUHV0IGRubHMgYmVmb3JlIHJhbmRvbSB3aGl0ZXNwYWNlLgoKU3VuIE5vdiAxMyAwNTowMjoyNSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogY29tcGF0TWFrZWZpbGUgKENQUEZMQUdTKTogTmV3IHZhcmlhYmxlLCBzZXQgZnJvbSBAQ1BQRkxBR1NALgoJKFJBTkxJQik6IFZhcmlhYmxlIHJlbW92ZWQuCgkocHJlZml4LCBleGVjX3ByZWZpeCk6IFNldCB0aGVzZSBmcm9tIEAuLi5ALgoJKC5jLm8pOiBVc2UgJChDUFBGTEFHUykuCgkoZ2xvYi9saWJnbG9iLmEpOiBEb24ndCBwYXNzIGRvd24gdmFyaWFibGVzIHRvIHN1Yi1tYWtlLgoJZ2xvYi9NYWtlZmlsZSBzaG91bGQgYmUgY29uZmlndXJlZCBwcm9wZXJseSBieSBjb25maWd1cmUuCgkoZGlzdGNsZWFuKTogUmVtb3ZlIGNvbmZpZy5sb2cgYW5kIGNvbmZpZy5jYWNoZSAoYXV0b2NvbmYgc3R1ZmYpLgoKTW9uIE5vdiAgNyAxMzo1ODowNiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogYWNjb25maWcuaDogQWRkICN1bmRlZiBIQVZFX1VOSU9OX1dBSVQuCgkqIGNvbmZpZ3VyZS5pbjogQ29udmVydGVkIHRvIEF1dG9jb25mIHYyLgoJKiBkaXIuYzogVGVzdCBIQVZFX0RJUkVOVF9ILCBIQVZFX1NZU19ESVJfSCwgSEFWRV9ORElSX0ggaW5zdGVhZAoJb2YgRElSRU5ULCBTWVNESVIsIE5ESVIuCgkqIGJ1aWxkLnNoLmluIChwcmVmaXgsIGV4ZWNfcHJlZml4KTogU2V0IHRoZXNlIGZyb20gQC4uLkAuCgkoQ1BQRkxBR1MpOiBOZXcgdmFyaWFibGUsIHNldCBmcm9tIEBDUFBGTEFHU0AuCgkoY29tcGlsaW5nIGxvb3ApOiBQYXNzICRDUFBGTEFHUyBiZWZvcmUgJENGTEFHUy4KCSogaW5zdGFsbC5zaDogRmlsZSByZW5hbWVkIHRvIGluc3RhbGwtc2guCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBXaGVuIG5vIGZsYWdzLCBzZXQgV09SRFMgdG8gemVyby4KClN1biBOb3YgIDYgMTg6MzQ6MDEgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43Mi4xLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogVGVybWluYXRlIHByb3Blcmx5IHdoZW4gRkxBR1NUUklORyBpcwogICAgICAgIGVtcHR5LgoKRnJpIE5vdiAgNCAxNjowMjo1MSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcyLgoKVHVlIE5vdiAgMSAwMToxODoxMCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcxLjUuCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBXaGVuIEFSR1YgaXMgbmlsLCBvbmx5IHNldAoJdXBkYXRlX3N0YXRlIGFuZCBjYWxsIG5vdGljZV9maW5pc2hlZF9maWxlIGlmIGpvYl9uZXh0X2NvbW1hbmQKCXJldHVybnMgemVyby4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IENhbGwgbm90aWNlX2ZpbmlzaGVkX2ZpbGUgZm9yIGVtcHR5CiAgICAgICAgY29tbWFuZCBsaW5lLgoKVGh1IE9jdCAyNyAwMjowMjo0NSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogZmlsZS5jIChzbmFwX2RlcHMpOiBTZXQgQ09NTUFORFNfU0lMRU5UIGZvciAuU0lMRU5ULCBub3QKICAgICAgICBDT01NQU5EU19OT0VSUk9SLgoKV2VkIE9jdCAyNiAwMjoxNDoxMCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcxLjQuCgpUdWUgT2N0IDI1IDIyOjQ5OjI0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBmaWxlLmMgKHNuYXBfZGVwcyk6IFNldCBjb21tYW5kX2ZsYWdzIGJpdHMgaW4gYWxsIDo6IGVudHJpZXMuCgpNb24gT2N0IDI0IDE4OjQ3OjUwIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWtlLmggKHBvc2l4X3BlZGFudGljKTogRGVjbGFyZSBpdC4KCSogbWFpbi5jIChtYWluKTogTW92ZSBjaGVja3MgLklHTk9SRSwgLlNJTEVOVCwgLlBPU0lYIHRvCiAgICAgICAgc25hcF9kZXBzLgoJKiBmaWxlLmMgKHNuYXBfZGVwcyk6IENoZWNrIC5JR05PUkUsIC5TSUxFTlQsIC5QT1NJWCBoZXJlIGluc3RlYWQKCW9mIGluIG1haW4uICBJZiAuSUdOT1JFIGhhcyBkZXBzLCBPUiBDT01NQU5EU19OT0VSUk9SIGludG8gdGhlaXIKCWNvbW1hbmRfZmxhZ3MgYW5kIGRvbid0IHNldCAtaS4gIExpa2V3aXNlIC5TSUxFTlQuCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IEluIEZMQUdTIGluaXRpYWxpemF0aW9uLCBPUiBpbgoJQ0hJTEQtPmZpbGUtPmNvbW1hbmRfZmxhZ3MuCgkqIGZpbGUuaCAoc3RydWN0IGZpbGUpOiBOZXcgbWVtYmVyIGBjb21tYW5kX2ZsYWdzJy4KClN1biBPY3QgMTYgMDE6MDE6NTEgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIG1haW4uYyAoc3dpdGNoZXMpOiBCdW1wIGZsYWcgdmFsdWVzIGZvciAtLW5vLXByaW50LWRpcmVjdG9yeSBhbmQKCS0td2Fybi11bmRlZmluZWQtdmFyaWFibGVzLCBzbyBuZWl0aGVyIGlzIDEgKHdoaWNoIGluZGljYXRlcyBhCglub25vcHRpb24gYXJndW1lbnQpLgoKU2F0IE9jdCAxNSAyMzozOTo0OCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChtYWluKTogQWRkIG1pc3NpbmcgY29kZSBpbiAuSUdOT1JFIHRlc3QuCgpNb24gT2N0IDEwIDA0OjA5OjAzIDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IERlZmluZSArRCBhbmQgK0YuCgpTYXQgT2N0ICAxIDA0OjA3OjQ4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiBtYWluLmMgKG1haW4pOiBEZWZpbmUgaGlkZGVuIGF1dG9tYXRpYyB2YXJpYWJsZSB3aXRoIGNvbW1hbmQKCXZhcnMsIGFuZCBNQUtFT1ZFUlJJREVTIHRvIGEgcmVmZXJlbmNlIHRvIHRoYXQuCgkoZGVmaW5lX21ha2VmbGFncyk6IElmIHBvc2l4X3BlZGFudGljLCB3cml0ZSBhIHJlZmVyZW5jZSB0byB0aGF0CglpbnN0ZWFkLgoKVGh1IFNlcCAyOSAwMDoxNDoyNiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogbWFpbi5jIChwb3NpeF9wZWRhbnRpYyk6IE5ldyB2YXJpYWJsZS4KCShtYWluKTogU2V0IHBvc2l4X3BlZGFudGljIGlmIC5QT1NJWCBpcyBhIHRhcmdldC4KCUZpeCAuSUdOT1JFIGFuZCAuU0lMRU5UIGNoZWNrcyB0byByZXF1aXJlIGlzX3RhcmdldC4KCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IERlZmluZSBuZXcgYXV0b21hdGljIHZhcmlhYmxlCgkkKywgbGlrZSAkXiBidXQgYmVmb3JlIGNhbGxpbmcgdW5pcXVpemVfZGVwcy4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogQ2FsbCBkZWxldGVfY2hpbGRfdGFyZ2V0cyBmb3Igbm9uLXNpZ25hbAoJZXJyb3IgaWYgLkRFTEVURV9PTl9FUlJPUiBpcyBhIHRhcmdldC4KClR1ZSBTZXAgMjcgMDE6NTc6MTQgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdT4KCgkqIFZlcnNpb24gMy43MS4zLgoKTW9uIFNlcCAyNiAxODoxNjo1NSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBEb24ndCBjaGFuZ2UgQy0+ZmlsZS0+Y29tbWFuZF9zdGF0ZSB3aGVuCglkeWluZy4gIFRlc3QgaXQgb25seSBhZnRlciBjYWxsaW5nIHN0YXJ0X2pvYl9jb21tYW5kIGZvciBhIG5ldwoJY29tbWFuZCBsaW5lLiAgV2hlbiBubyBtb3JlIGNtZHMsIGp1c3Qgc2V0IEMtPmZpbGUtPnVwZGF0ZV9zdGF0dXMuCgkoc3RhcnRfam9iX2NvbW1hbmQpOiBXaGVuIHRoZSBsYXN0IGxpbmUgaXMgZW1wdHkgb3IgdW5kZXIgLW4sIHNldAoJQy0+ZmlsZS0+dXBkYXRlX3N0YXR1cy4KCShzdGFydF93YWl0aW5nX2pvYik6IEdyb2sgY3Nfbm90X3N0YXJ0ZWQgYWZ0ZXIgc3RhcnRfam9iX2NvbW1hbmQKCWFzIHN1Y2Nlc3MuCgkobmV3X2pvYik6IFNldCBDLT5maWxlLT51cGRhdGVfc3RhdHVzIHdoZW4gdGhlcmUgYXJlIG5vIGNtZHMuCgkoam9iX25leHRfY29tbWFuZCk6IFdoZW4gb3V0IG9mIGxpbmVzLCBkb24ndCBzZXQKCUNISUxELT5maWxlLT51cGRhdGVfc3RhdHVzIG9yIENISUxELT5maWxlLT5jb21tYW5kX3N0YXRlLgoKCSogbWFpbi5jIChxdW90ZV9hc193b3JkKTogUmVuYW1lZCBmcm9tIHNoZWxsX3F1b3RlLiAgVGFrZSBuZXcgYXJnOwoJaWYgbm9uemVybywgYWxzbyBkb3VibGUgJHMuCgkobWFpbik6IERlZmluZSBNQUtFT1ZFUlJJREVTIGZyb20gY29tbWFuZF92YXJpYWJsZXMgaGVyZS4KCShkZWZpbmVfbWFrZWZsYWdzKTogRG9uJ3QgdXNlIGNvbW1hbmRfdmFyaWFibGVzIGhlcmU7IGluc3RlYWQgd3JpdGUgYQoJcmVmZXJlbmNlICQoTUFLRU9WRVJSSURFUykgaW4gTUFLRUZMQUdTLiAgTWFrZSB2YXJzIHJlY3Vyc2l2ZS4KCgkqIGRpci5jIFtfX01TRE9TX19dOiBGaXhlZCB0eXBvLgoKCSogdnBhdGguYyAoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IFJlc2V0IEVYSVNUUyB3aGVuIHN0YXQgZmFpbHMuCgpTYXQgU2VwIDEwIDAzOjAxOjM1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZW1ha2UuYzogSW5jbHVkZSA8YXNzZXJ0Lmg+IGFuZCB1c2UgYXNzZXJ0IGluc3RlYWQgb2YgcHJpbnRmcwogICAgICAgIGFuZCBhYm9ydC4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogTG9vcCB1bnRpbCBvcHRpbmQgaGl0cyBBUkdDLCBub3QganVzdAoJdW50aWwgZ2V0b3B0X2xvbmcgcmV0dXJucyBFT0YuICBJbml0aWFsaXplIEMgdG8gemVybyBiZWZvcmUgbG9vcDsKCWluIGxvb3AgaWYgQyBpcyBFT0YsIHNldCBvcHRhcmcgZnJvbSBBUkdWW29wdGluZCsrXSwgZWxzZSBjYWxsCglnZXRvcHRfbG9uZy4KCShkZWNvZGVfZW52X3N3aXRjaGVzKTogVXNlIHZhcmlhYmxlX2V4cGFuZCBpbnN0ZWFkIG9mCglhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kLiAgQWxsb2NhdGUgYSBmcmVzaCBidWZmZXIgdG8gY29weSBzcGxpdAoJd29yZHMgaW50bzsgc2NhbiBjaGFyYWN0ZXJzIGJ5IGhhbmQgdG8gYnJlYWsgd29yZHMgYW5kCglkZWJhY2tzbGFzaGlmeS4KCShzaGVsbF9xdW90ZSk6IE5ldyBmdW5jdGlvbi4KCShkZWZpbmVfbWFrZWZsYWdzKTogQWxsb2NhdGUgZG91YmxlZCBzcGFjZSBmb3Igc3dpdGNoIGFyZ3MsIGFuZCBjb21tYW5kCgl2YXJpYWJsZSBuYW1lcyBhbmQgdmFsdWVzOyB1c2Ugc2hlbGxfcXVvdGUgdG8gcXVvdGUgdGhvc2UgdGhpbmdzLgoKRnJpIFNlcCAgOSAwMTozNzo0NyAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1PgoKCSogVmVyc2lvbiAzLjcxLjIuCgoJKiBhY2NvbmZpZy5oOiBBZGQgSEFWRV9TWVNfU0lHTElTVCBhbmQgSEFWRV9fU1lTX1NJR0xJU1QuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IFRoZSBub24tb3B0aW9uIHJldHVybiBmcm9tIGdldG9wdCBpcwoJMSwgbm90IDAuCgkoY29tbWFuZF92YXJpYWJsZXMpOiBOZXcgdHlwZSBhbmQgdmFyaWFibGUuCgkoZGVjb2RlX3N3aXRjaGVzLCBkZWNvZGVfZW52X3N3aXRjaGVzKTogQWZ0ZXIgbWFraW5nIGEgdmFyaWFibGUKCWRlZmluaXRpb24sIHJlY29yZCB0aGUgc3RydWN0IHZhcmlhYmxlIHBvaW50ZXIgaW4gdGhlCgljb21tYW5kX3ZhcmlhYmxlcyBjaGFpbi4KCShkZWZpbmVfbWFrZWZsYWdzKTogSWYgQUxMLCB3cml0ZSB2YXJpYWJsZSBkZWZpbml0aW9ucyBmb3IKCWNvbW1hbmRfdmFyaWFibGVzLgoKCSogbWFpbi5jIChvdGhlcl9hcmdzKTogVmFyaWFibGUgcmVtb3ZlZC4KCShnb2FscywgbGFzdGdvYWwpOiBOZXcgc3RhdGljIHZhcmlhYmxlcyAobW92ZWQgZnJvbSBhdXRvIGluIG1haW4pLgoJKG1haW4pOiBEb24ndCBwcm9jZXNzIE9USEVSX0FSR1MgYXQgYWxsLgoJRG9uJ3Qgc2V0IHZhcmlhYmxlIE1BS0VPVkVSUklERVMgYXQgYWxsOyBkZWZpbmUgTUFLRSB0byBqdXN0CiAgICAgICAgJChNQUtFX0NPTU1BTkQpLgoJKGluaXRfc3dpdGNoZXMpOiBQcmVwZW5kIGEgLSB7cmV0dXJuIGluIG9yZGVyfSBpbnN0ZWFkIG9mIGEgKwoJe3JlcXVpcmUgb3JkZXJ9LgoJKGRlY29kZV9zd2l0Y2hlcyk6IERvbid0IHNldCBPVEhFUl9BUkdTIGF0IGFsbC4KCUdyb2sgJ1wwJyByZXR1cm4gZnJvbSBnZXRvcHRfbG9uZyBhcyBub24tb3B0aW9uIGFyZ3VtZW50OyB0cnkKCXZhcmlhYmxlIGRlZmluaXRpb24gYW5kIChpZiAhRU5WKSBlbnRlciBnb2FsIHRhcmdldHMgaGVyZS4KCShkZWNvZGVfZW52X3N3aXRjaGVzKTogVXNlIGFsbG9jYXRlZF92YXJpYWJsZV9leHBhbmQgdG8gc3RvcmUgdmFsdWUuCglVc2UgZmluZF9uZXh0X3Rva2VuIHRvIHNpbXBsaWZ5IHdvcmQtc3BsaXR0aW5nIGxvb3AuICBEb24ndAoJcHJlcGVuZCBhIGRhc2ggdG8gdW5pbnRlcnByZXRlZCB2YWx1ZS4gIEluc3RlYWQsIGlmIHNwbGl0IGludG8KCW9ubHkgb25lIHdvcmQsIHRyeSB2YXJpYWJsZSBkZWZpbml0aW9uIGFuZCBmYWlsaW5nIHRoYXQgcHJlcGVuZCBhCglkYXNoIHRvIHRoZSB3b3JkIGFuZCBwYXNzIGl0IHRvIGRlY29kZV9zd2l0Y2hlcyBhcyBhIHNpbmdsZSBhcmcuCgpXZWQgU2VwICA3IDAzOjAyOjQ2IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBPbmx5IHJlY2hlY2sgbW9kdGltZXMgaWYKCUZJTEUtPmNvbW1hbmRfc3RhdGUgd2FzIGNzX3J1bm5pbmcgb24gZW50cnkgKG1lYW5pbmcgdGhlIGNvbW1hbmRzCglhY3R1YWxseSBqdXN0IHJhbikuCgkodXBkYXRlX2ZpbGVfMSk6IFdoZW5ldmVyIHdlIHNldCBGSUxFLT51cGRhdGVfc3RhdHVzLCBjYWxsCglub3RpY2VfZmluaXNoZWRfZmlsZSBpbnN0ZWFkIG9mIGp1c3Qgc2V0X2NvbW1hbmRfc3RhdGUuCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFdoZW5ldmVyIHdlIHNldAoJQ0hJTEQtPmZpbGUtPnVwZGF0ZV9zdGF0dXMsIGNhbGwgbm90aWNlX2ZpbmlzaGVkX2ZpbGUgaW5zdGVhZCBvZgoJanVzdCBzZXRfY29tbWFuZF9zdGF0ZS4KClR1ZSBTZXAgIDYgMTk6MTM6NTQgMTk5NCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHU+CgoJKiBkZWZhdWx0LmM6IEFkZCBtaXNzaW5nICIuCgoJKiBqb2IuYzogQ2hhbmdlZCBhbGwgYXNzaWdubWVudHMgb2YgY29tbWFuZF9zdGF0ZSBtZW1iZXJzIHRvIGNhbGxzCgl0byBzZXRfY29tbWFuZF9zdGF0ZS4KCSogcmVtYWtlLmM6IExpa2V3aXNlLgoJKiBmaWxlLmMgKHNldF9jb21tYW5kX3N0YXRlKTogTmV3IGZ1bmN0aW9uLgoJKiBmaWxlLmg6IERlY2xhcmUgc2V0X2NvbW1hbmRfc3RhdGUuCgoJKiBtYWluLmMgKGluaXRfc3dpdGNoZXMpOiBQdXQgYSArIGZpcnN0IGluIG9wdGlvbnMuCgpNb24gSnVsIDI1IDE4OjA3OjQ2IDE5OTQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHU+CgoJTWVyZ2UgTVNET1MvR08zMiBwb3J0IGZyb20gREogRGVsb3JpZSA8ZGpAY3Ryb24uY29tPi4KCSogdnBhdGguYzogQ2hhbmdlZCBhbGwgdXNlcyBvZiAnOicgdG8gUEFUSF9TRVBBUkFUT1JfQ0hBUi4KCSogbWFpbi5jIChkaXJlY3RvcnlfYmVmb3JlX2NoZGlyKTogTmV3IHZhcmlhYmxlLCBtb3ZlZCBvdXQgb2YgbWFpbgogICAgICAgICh3YXMgbG9jYWwpLgoJKG1haW4pIFtfX01TRE9TX19dOiBMb29rIGZvciBcIG9yIDogdG8gZGVsaW1pdCBsYXN0IGNvbXBvbmVudCBvZgoJUFJPR1JBTS4gIERvbid0IGZyb2IgQVJHVlswXSBiZWZvcmUgc2V0dGluZyBNQUtFX0NPTU1BTkQgdmFyaWFibGUuCgkoZGllKTogQ2hhbmdlIGJhY2sgdG8gYGRpcmVjdG9yeV9iZWZvcmVfY2hkaXInIGJlZm9yZSBkeWluZy4KCSogbWFrZS5oIChQQVRIX1NFUEFSQVRPUl9DSEFSKTogTmV3IG1hY3JvOyBkaWZmZXJpbmcgZGVmbnMgZm9yCiAgICAgICAgW19fTVNET1NfX10gYW5kIG5vdC4KCSogam9iLmMgW19fTVNET1NfX106IEluY2x1ZGUgPHByb2Nlc3MuaD4uCglbX19NU0RPU19fXSAoZG9zX3BpZCwgZG9zX3N0YXR1cywgZG9zX2JuYW1lLCBkb3NfYmVuYW1lLAoJZG9zX2JhdGNoX2ZpbGUpOiBOZXcgdmFyaWFibGVzLgoJKHJlYXBfY2hpbGRyZW4pIFtfX01TRE9TX19dOiBEb24ndCBjYWxsIHdhaXQ7IGp1c3QgZXhhbWluZSB0aG9zZSB2YXJzLgoJKHVuYmxvY2tfc2lncykgW19fTVNET1NfX106IERvIG5vdGhpbmcuCgkoc3RhcnRfam9iX2NvbW1hbmQpIFtfX01TRE9TX19dOiBVc2Ugc3Bhd252cGUgaW5zdGVhZCBvZiB2Zm9yayAmIGV4ZWMuCgkobG9hZF90b29faGlnaCkgW19fTVNET1NfX106IEFsd2F5cyByZXR1cm4gdHJ1ZS4KCShzZWFyY2hfcGF0aCkgW19fTVNET1NfX106IENoZWNrIGZvciA6IG9yIC8gaW4gRklMRSB0byBwdW50LgoJVXNlIFBBVEhfU0VQQVJBVE9SX0NIQVIgaW5zdGVhZCBvZiAnOicuCgkoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCkgW19fTVNET1NfX106IFdob2xseSBkaWZmZXJlbnQKCXZhbHVlcyBmb3Igc2hfY2hhcnMgYW5kIHNoX2NtZHMuICBXaG9sbHkgbmV3IGNvZGUgdG8gaGFuZGxlIHNoZWxsCglzY3JpcHRzLgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb246IGBzaGVsbCcpIFtfX01TRE9TX19dOiBXaG9sbHkgbmV3CiAgICAgICAgaW1wbGVtZW50YXRpb24uCgkqIGRpci5jIFtfX01TRE9TX19dIChkb3NpZnkpOiBOZXcgZnVuY3Rpb24uCgkoZGlyX2NvbnRlbnRzX2ZpbGVfZXhpc3RzX3ApIFtfX01TRE9TX19dOiBDYWxsIGl0IG9uIEZJTEVOQU1FIGFuZAoJcHJvY2VzcyB0aGUgcmVzdWx0IGluc3RlYWQgb2YgRklMRU5BTUUgaXRzZWxmLgoJKGZpbGVfaW1wb3NzaWJsZV9wKSBbX19NU0RPU19fXTogTGlrZXdpc2UuCgkqIGRlZmF1bHQuYyBbX19NU0RPU19fXTogRGVmaW5lIEdDQ19JU19OQVRJVkUuCgkoZGVmYXVsdF9zdWZmaXhfcnVsZXMpIFtfX01TRE9TX19dOiBVc2UgYHlfdGFiLmMnIGluc3RlYWQgb2YgYHkudGFiLmMnLgoJKGRlZmF1bHRfdmFyaWFibGVzKSBbR0NDX0lTX05BVElWRV06IFNldCBDQyBhbmQgQ1hYIHRvIGBnY2MnLCBZQUNDIHRvCglgYmlzb24gLXknLCBhbmQgTEVYIHRvIGBmbGV4Jy4KCSogY29uZmlndXJlLmJhdCwgY29uZmlnaC5kb3M6IE5ldyBmaWxlcy4KCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKSBbX19NU0RPU19fXTogSnVzdCByZW1vdmUKCWludGVybWVkaWF0ZXMgYW5kIGV4aXQuCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBBZGQgcGFyZW5zIGluIGxlbmd0aAoJY29tcHV0YXRpb24gaW4gLlNVRkZJWEVTIGRlcCBsb29wIHRvIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmcuICBGcm9tCglKaW0gTWV5ZXJpbmcuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBGcmVlIEZJTEVOQU1FIGlmIHdlIGFsbG9jYXRlZCBpdC4gIEZyb20KICAgICAgICBKaW0gTWV5ZXJpbmcuCgpNb24gSnVsICA0IDE3OjQ3OjA4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtaXNjLmMgKHNhZmVfc3RhdCk6IE5ldyBmdW5jdGlvbiwgRUlOVFItc2FmZSB3cmFwcGVyIGFyb3VuZCBzdGF0LgoJKiB2cGF0aC5jIChzZWxlY3RpdmVfdnBhdGhfc2VhcmNoKTogVXNlIHNhZmVfc3RhdCBpbiBwbGFjZSBvZiBzdGF0LgoJKiByZWFkLmMgKGNvbnN0cnVjdF9pbmNsdWRlX3BhdGgpOiBVc2Ugc2FmZV9zdGF0IGluIHBsYWNlIG9mIHN0YXQuCgkqIGpvYi5jIChzZWFyY2hfcGF0aCk6IFVzZSBzYWZlX3N0YXQgaW4gcGxhY2Ugb2Ygc3RhdC4KCSogZGlyLmMgKGZpbmRfZGlyZWN0b3J5KTogVXNlIHNhZmVfc3RhdCBpbiBwbGFjZSBvZiBzdGF0LgoJKiBjb21tYW5kcy5jIChkZWxldGVfdGFyZ2V0KTogVXNlIHNhZmVfc3RhdCBpbiBwbGFjZSBvZiBzdGF0LgoJKiBhcnNjYW4uYyAoYXJfbWVtYmVyX3RvdWNoKSBbRUlOVFJdOiBEbyBFSU5UUiBsb29waW5nIGFyb3VuZCBmc3RhdC4KCSogcmVtYWtlLmMgKG5hbWVfbXRpbWUpOiBVc2Ugc2FmZV9zdGF0IGluIHBsYWNlIG9mIHN0YXQuCgkodG91Y2hfZmlsZSkgW0VJTlRSXTogRG8gRUlOVFIgbG9vcGluZyBhcm91bmQgZnN0YXQuCgpGcmkgSnVuIDI0IDA1OjQwOjI0IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBDaGVjayBmb3IgYSBzaGVsbCBjb21tYW5kIGZpcnN0LCBhbmQKCXRoZW4gc3RyaXAgbGVhZGluZyB0YWJzIGJlZm9yZSBmdXJ0aGVyIGNoZWNraW5nIGlmIGl0J3Mgbm90IGEKCXNoZWxsIGNvbW1hbmQgbGluZS4KCgkqIG1ha2UuaCBbX19hcm1dOiBVbmRlZmluZSBQT1NJWC4KCVshX19HTlVfTElCUkFSWV9fICYmICFQT1NJWCAmJiAhX1BPU0lYX1ZFUlNJT05dOiBEb24ndCBkZWNsYXJlIHN5c3RlbQoJZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGludC4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogQWZ0ZXIgc3dhbGxvd2luZyBhCgliYWNrc2xhc2gtbmV3bGluZSBjb21iaW5hdGlvbiwgaWYgSU5TVFJJTkcgaXMgc2V0IGdvdG8gc3RyaW5nX2NoYXIKCShuZXcgbGFiZWwpIGZvciBub3JtYWwgSU5TVFJJTkcgaGFuZGxpbmcgY29kZS4KClNhdCBKdW4gIDQgMDE6MTE6MjAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IERvbid0IGNoZWNrIGZvciBzeXNfc2lnbGlzdCBhbmQgX3N5c19zaWdsaXN0IHdpdGgKCUFDX0hBVkVfRlVOQ1MuICBJbnN0ZWFkIHVzZSB0d28gQUNfQ09NUElMRV9DSEVDS3MuCgpNb24gTWF5IDIzIDE4OjIwOjM4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzEuMSByZWxlYXNlZC4KCgkqIG1ha2UuaCBbIV9fR05VX0xJQlJBUllfXyAmJiAhUE9TSVhdOiBBbHNvIHRlc3QgI2lmbmRlZgoJX1BPU0lYX1ZFUlNJT04gZm9yIHRoZXNlIGRlY2xhcmF0aW9ucy4KCgkqIG1pc2MuYyBbR0VUTE9BREFWR19QUklWSUxFR0VEXSBbUE9TSVhdOiBSZW1vdmUgYm9ndXMgI2lmbmRlZnMKCWFyb3VuZCAjdW5kZWZzIG9mIEhBVkVfU0VUUkVVSUQgYW5kIEhBVkVfU0VUUkVHSUQuCgpTYXQgTWF5IDIxIDE2OjI2OjM4IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzEgcmVsZWFzZWQuCgoJKiBtaXNjLmMgW0dFVExPQURBVkdfUFJJVklMRUdFRF0gW1BPU0lYXTogRG9uJ3QgdGVzdCBbSEFWRV9TRVRVSURdCglhbmQgW0hBVkVfU0VUR0lEXS4gIEV2ZXJ5IHN5c3RlbSBoYXMgdGhvc2UsIGFuZCBjb25maWd1cmUgZG9lc24ndAoJY2hlY2sgZm9yIHRoZW0uCgoJKiBtYWtlLmggW19QT1NJWF9WRVJTSU9OXTogRG9uJ3QgI2RlZmluZSBQT1NJWCAjaWZkZWYgdWx0cml4LgoKCSogY29tcGF0TWFrZWZpbGUgKGxvYWRhdmcpOiBEZXBlbmQgb24gYW5kIHVzZSBsb2FkYXZnLmMgaW5zdGVhZCBvZgoJZ2V0bG9hZGF2Zy5jLgoJKGxvYWRhdmcuYyk6IExpbmsgb3IgY29weSBpdCBmcm9tIGdldGxvYWRhdmcuYy4KCShkaXN0Y2xlYW4pOiBSZW1vdmUgbG9hZGF2Zy5jLgoKTW9uIE1heSAxNiAyMjo1OTowNCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcwLjQuCgoJKiBtaXNjLmMgW0dFVExPQURBVkdfUFJJVklMRUdFRF0gWyEgUE9TSVhdOiBVbmRlZmluZSBIQVZFX1NFVEVVSUQKCWFuZCBIQVZFX1NFVEVHSUQuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBJbiBTQ0NTIHJ1bGVzLCBwdXQKCSQoU0NDU19PVVRQVVRfT1BUSU9OKSBiZWZvcmUgJDwuICBPbiBzb21lIHN5c3RlbXMgLUcgaXMgZ3Jva2tlZAoJb25seSBiZWZvcmUgdGhlIGZpbGUgbmFtZS4KCSogY29uZmlndXJlLmluIChTQ0NTX0dFVF9NSU5VU19HIGNoZWNrKTogUHV0IC1HIGZsYWcgYmVmb3JlIGZpbGUgbmFtZS4KClR1ZSBNYXkgMTAgMTY6Mjc6MzggMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogU3dhbGxvdwoJYmFja3NsYXNoLW5ld2xpbmUgY29tYmluYXRpb25zIGluc2lkZSAnJyBzdHJpbmdzIHRvby4KClRodSBNYXkgIDUgMDQ6MTU6MTAgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogQ2FsbCBjb2xsYXBzZV9jb250aW51YXRpb25zIG9uIGVhY2ggbGluZQoJYmVmb3JlIGFsbCBlbHNlLgoKTW9uIEFwciAyNSAxOTozMjowMiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBOb3RpY2UgbmV3bGluZSBpbnNpZGUKCScnIHN0cmluZyB3aGVuIFJFU1RQIGlzIG5vbi1udWxsLgoKRnJpIEFwciAyMiAxNzozMzozMCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy43MC4zLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9nb2FsX2NoYWluKTogUmVzZXQgRklMRSB0byBHLT5maWxlIGFmdGVyIHRoZQoJZG91YmxlLWNvbG9uIGxvb3Agc28gaXQgaXMgbmV2ZXIgbnVsbCBmb3IgZm9sbG93aW5nIGNvZGUuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBGaXggYG92ZXJyaWRlIGRlZmluZScgcGFyc2luZyB0byBza2lwCgl3aGl0ZXNwYWNlIGFmdGVyIGBkZWZpbmUnIHByb3Blcmx5LgoKCSogY29tcGF0TWFrZWZpbGUgKHNyY2Rpcik6IERlZmluZSBhcyBAc3JjZGlyQDsgZG9uJ3QgcmVmZXJlbmNlCgkkKFZQQVRIKS4KCShnbG9iL01ha2VmaWxlKTogTmV3IHRhcmdldC4KClRodSBBcHIgMjEgMTY6MTY6NTUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNzAuMi4KCgkqIG1pc2MuYyAocmVtb3ZlX2NvbW1lbnRzKTogVXNlIGZpbmRfY2hhcl91bnF1b3RlLgoJKiBtYWtlLmggKGZpbmRfY2hhcl91bnF1b3RlKTogRGVjbGFyZSBpdC4KCSogcmVhZC5jIChmaW5kX2NoYXJfdW5xdW90ZSk6IE5ldyBmdW5jdGlvbiwgZ2VuZXJhbGl6ZWQgZnJvbQoJZmluZF9wZXJjZW50LgoJKGZpbmRfcGVyY2VudCwgZmluZF9zZW1pY29sb24sIHBhcnNlX2ZpbGVfc2VxKTogVXNlIHRoYXQuCgpXZWQgQXByIDIwIDE4OjQyOjM5IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IEFsd2F5cyBhbGxvY2F0ZSBuZXcgc3RvcmFnZSBmb3IKCUZJTEUtPnN0ZW0uICBJdCBpcyBub3Qgc2FmZSB0byBzdG9yZSBTVEVNJ3MgYWRkcmVzcyBiZWNhdXNlIGl0CgltaWdodCBiZSBhdXRvIHN0b3JhZ2UuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBzZXRldWlkIGFuZCBzZXRlZ2lkLgoJKiBtaXNjLmMgW0hBVkVfU0VURVVJRF06IERlY2xhcmUgc2V0ZXVpZC4KCVtIQVZFX1NFVEVHSURdOiBEZWNsYXJlIHNldGVnaWQuCgkobWFrZV9hY2Nlc3MsIHVzZXJfYWNjZXNzKSBbSEFWRV9TRVRFVUlEXTogVXNlIHNldGV1aWQuCglbSEFWRV9TRVRFR0lEXTogVXNlIHNldGVnaWQuCgoJKiByZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pOiBTZXQgU1RBVFVTIHRvIEZJTEUtPnVwZGF0ZV9zdGF0dXMsCgl0byBwcmVzZXJ2ZSB3aGV0aGVyIGl0J3MgMiBmb3IgZXJyb3Igb3IgMSBmb3IgLXEgdHJpZ2dlci4gIFdoZW4KCVNUQVRVUyBnZXRzIG5vbnplcm8gYW5kIC1xIGlzIHNldCwgYWx3YXlzIHN0b3AgaW1tZWRpYXRlbHkuCgkqIG1haW4uYyAobWFpbiwgZGVjb2RlX3N3aXRjaGVzKTogRGllIHdpdGggMiBmb3IgZXJyb3JzLgoJKG1haW4pOiBBY2NlcHQgMiByZXR1cm4gZnJvbSB1cGRhdGVfZ29hbF9jaGFpbiBhbmQgZGllIHdpdGggdGhhdC4KCSogbWlzYy5jIChmYXRhbCwgbWFrZWZpbGVfZmF0YWwpOiBEaWUgd2l0aCAyOyAxIGlzIHJlc2VydmVkIGZvciAtcQoJYW5zd2VyLgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IERpZSB3aXRoIDIgZm9yIGVycm9yLgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogU2V0IHVwZGF0ZV9zdGF0dXMgdG8gMiBmb3IgZXJyb3IuICBTZXQgaXQgdG8KCTEgd2hlbiB3ZSB3b3VsZCBydW4gYSBjb21tYW5kIGFuZCBxdWVzdGlvbl9mbGFnIGlzIHNldC4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IERvbid0IG1hcmsgbWFrZWZpbGVzIGFzIHByZWNpb3VzLiAgSnVzdAoJbGlrZSBvdGhlciB0YXJnZXRzLCB0aGV5IGNhbiBiZSBsZWZ0IGluY29uc2lzdGVudCBhbmQgaW4gbmVlZCBvZgoJcmVtYWtpbmcgYnkgYWJvcnRlZCBjb21tYW5kcy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFdyaXRlIG5vIGVycm9yIG1zZyBmb3IgLWluY2x1ZGUgZmlsZS4KClR1ZSBBcHIgIDUgMDU6MjI6MTkgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCk6IERvbid0IHVuYmxvY2sgc2lnbmFscy4KCgkqIGZpbGUuaCAoc3RydWN0IGZpbGUpOiBDaGFuZ2UgbWVtYmVyIGBkb3VibGVfY29sb24nIGZyb20gZmxhZyB0bwoJYHN0cnVjdCBmaWxlIConLgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IFNldCBkb3VibGVfY29sb24gcG9pbnRlciBpbnN0ZWFkIG9mIGZsYWcuCgkqIG1haW4uYyAobWFpbik6IFdoZW4gZGlzcXVhbGlmeWluZyBtYWtlZmlsZXMgZm9yIHVwZGF0aW5nLCB1c2UKCWRvdWJsZV9jb2xvbiBwb2ludGVyIHRvIGZpbmQgYWxsIGVudHJpZXMgZm9yIGEgZmlsZS4KCSogZmlsZS5jIChlbnRlcl9maWxlKTogSWYgdGhlcmUgaXMgYWxyZWFkeSBhIGRvdWJsZS1jb2xvbiBlbnRyeQoJZm9yIHRoZSBmaWxlLCBzZXQgTkVXLT5kb3VibGVfY29sb24gdG8gdGhhdCBwb2ludGVyLgoJKGZpbGVfaGFzaF9lbnRlcik6IFVzZSBGSUxFLT5kb3VibGVfY29sb24gdG8gZmluZCBhbGwgZW50cmllcyB0bwoJc2V0IG5hbWUuCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IERvIGlubmVyIGxvb3Agb24gZG91YmxlLWNvbG9uIGVudHJpZXMuCgkodXBkYXRlX2ZpbGUpOiBVc2UgRklMRS0+ZG91YmxlX2NvbG9uIHBvaW50ZXIgdG8gZmluZCBhbGwgZW50cmllcy4KCShmX210aW1lKTogTGlrZXdpc2UuCgkobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBQcm9wYWdhdGUgbXRpbWUgY2hhbmdlIHRvIGFsbCBlbnRyaWVzLgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBSZXR1cm4gYWZ0ZXIgYWJvcnQuCgpGcmkgQXByICAxIDE4OjQ0OjE1IDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgoJKHBhcnNlX2ZpbGVfc2VxKTogV2hlbiByZW1vdmluZyBhbiBlbHQgdGhhdCBpcyBqdXN0IGApJywgcHJvcGVybHkKCWZpeCB1cCB0aGUgcHJldmlvdXMgZWx0J3MgbmV4dCBwb2ludGVyLgoKTW9uIE1hciAyOCAxODozMTo0OSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBtb2xlLmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBEbyBBQ19TRVRfTUFLRS4KCSogR05VbWFrZWZpbGUgKE1ha2VmaWxlLmluKTogRWRpdCBNQUtFIGFzc2lnbm1lbnQgaW50byBAU0VUX01BS0VALgoKRnJpIE1hciAgNCAwMDowMjozMiAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZnVuY3Rpb24uYyAoc3Vic3RfZXhwYW5kKTogSWYgQllfV09SRCBvciBTVUZGSVhfT05MWSBpcyBzZXQgYW5kCgl0aGUgc2VhcmNoIHN0cmluZyBpcyB0aGUgZW1wdHkgc3RyaW5nLCBmaW5kIGEgbWF0Y2ggYXQgdGhlIGVuZCBvZgoJZWFjaCB3b3JkICh1c2luZyBlbmRfb2ZfdG9rZW4gaW4gcGxhY2Ugb2Ygc2luZGV4KS4KCgkqIG1pc2MuYyAoZW5kX29mX3Rva2VuKTogRG9uJ3QgdHJlYXQgYmFja3NsYXNoZXMgc3BlY2lhbGx5OyB5b3UKCWNhbiBubyBsb25nZXIgZXNjYXBlIGJsYW5rcyB3aXRoIGJhY2tzbGFzaGVzIGluIGV4cG9ydCwgdW5leHBvcnQsCglhbmQgdnBhdGguICBUaGlzIHdhcyBuZXZlciBkb2N1bWVudGVkIGFueXdheS4KClRodSBNYXIgIDMgMjM6NTM6NDYgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFZhcmlhYmxlIG5hbWUgZm9yIGBkZWZpbmUnIGlzIG5vdCBqdXN0CglmaXJzdCB0b2tlbjsgdXNlIHdob2xlIHJlc3Qgb2YgbGluZSBhbmQgc3RyaXAgdHJhaWxpbmcgYmxhbmtzLgoKV2VkIEZlYiAxNiAxNjowMzo0NSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjcwLjEuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBBZGQgLWQgbXNnIHN0YXRpbmcgYXJncy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFVzZSBpc3NwYWNlIHRvIHNraXAgb3ZlciBsZWFkaW5nCgl3aGl0ZXNwYWNlLCBhbmQgZXhwbGljaXRseSBhdm9pZCBza2lwcGluZyBvdmVyIHRhYnMuICBEb24ndCB3YW50Cgl0byBza2lwIGp1c3Qgc3BhY2VzIHRob3VnaDsgZm9ybWZlZWRzIGV0IGFsIHNob3VsZCBiZSBza2lwcGVkLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW19faHB1eF06IEFkZCBmIGluIEFSRkxBR1MuCgoJKiBhcnNjYW4uYyAoYXJfbmFtZV9lcXVhbCkgW19faHB1eF06IFN1YnRyYWN0IDIgaW5zdGVhZCBvZiAxIGZyb20KCXNpemVvZiBhcl9uYW1lIGZvciBtYXggbGVuZ3RoIHRvIGNvbXBhcmUuCgoJKiBtaXNjLmMgW0dFVExPQURBVkdfUFJJVklMRUdFRF0gW1BPU0lYXTogVW5kZWZpbmUgSEFWRV9TRVRSRVVJRAoJI2lmZGVmIEhBVkVfU0VUVUlEOyBsaWtld2lzZSBIQVZFX1NFVFJFR0lEIGFuZCBIQVZFX1NFVEdJRC4KCgkqIG1haW4uYyAobWFpbik6IENhbGwgdXNlcl9hY2Nlc3MgYWZ0ZXIgc2V0dGluZyBgcHJvZ3JhbScsIGluIGNhc2UKCWl0IG5lZWRzIHRvIHVzZSBpdCBpbiBhbiBlcnJvciBtZXNzYWdlLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogSWdub3JlIGFuIGVtcHR5IGxpbmUgc3RhcnRpbmcgd2l0aCBhIHRhYi4KClRodSBGZWIgMTAgMjE6NDU6MzEgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbiAoQUNfU1lTX1NJR0xJU1RfREVDTEFSRUQpOiBVc2UgdGhpcyBpbnN0ZWFkIG9mCglBQ19DT01QSUxFX0NIRUNLIHRoYXQgaXMgbm93IGl0cyBjb250ZW50cy4KCkZyaSBGZWIgIDQgMTY6Mjg6NTQgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaDogI3VuZGVmIHN0cmVycm9yIGFmdGVyICNpbmNsdWRlIDxzdHJpbmcuaD4uCglbISBBTlNJX1NUUklOR106IERlY2xhcmUgc3RyZXJyb3IuCgpUaHUgRmViICAzIDAyOjIxOjIyIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtaXNjLmMgKHN0cmVycm9yKTogI3VuZGVmIGFueSBtYWNybyBiZWZvcmUgZnVuY3Rpb24gZGVmaW5pdGlvbi4KCk1vbiBKYW4gMzEgMTk6MDc6MjMgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogQ2FsY3VsYXRlIEJFRyBiZWZvcmUgbG9vcAoJdG8gc3RyaXAgYmxhbmtzIGJ5IGRlY3JlbWVudGluZyBFTkQuICBEb24ndCBkZWNyIEVORCB0byBiZWZvcmUgQkVHLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogU2tpcCBvdmVyIGxlYWRpbmcgc3BhY2UgY2hhcmFjdGVycywgYnV0Cglub3QgdGFicywgYWZ0ZXIgcmVtb3ZpbmcgY29udGludWF0aW9ucyBhbmQgY29tbWVudHMgKGl0IHVzZWQgdG8KCXVzZSBpc3NwYWNlKS4KClR1ZSBKYW4gMjUgMTY6NDU6MDUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogSW4gJChARCkgZXQgYWwsIHVzZQoJcGF0c3Vic3QgdG8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoLgoKCSogY29tbWFuZHMuYyAoZGVsZXRlX3RhcmdldCk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgoJZGVsZXRlX2NoaWxkX3RhcmdldHMuICBDaGVjayBmb3IgYXJjaGl2ZSBtZW1iZXJzIGFuZCBnaXZlIHNwZWNpYWwgbXNnLgoJKGRlbGV0ZV9jaGlsZF90YXJnZXRzKTogVXNlIGRlbGV0ZV90YXJnZXQuCgpNb24gSmFuIDE3IDE3OjAzOjIyIDE5OTQgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfc3VmZml4X3J1bGVzKTogVXNlICQoVEVYSTJEVklfRkxBR1MpIGluCgl0ZXhpMmR2aSBydWxlcy4JVXNlICQoTUFLRUlORk9fRkxBR1MpIGluIG1ha2VpbmZvIHJ1bGVzLgoKVHVlIEphbiAxMSAxOToyOTo1NSAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogR05VbWFrZWZpbGUgKHRhcmZpbGVzKTogT21pdCBtYWtlLWRvYy4KCShtYWtlLSQodmVyc2lvbikudGFyKTogSW5jbHVkZSBtYWtlLmluZm8qLgoKRnJpIEphbiAgNyAxNjoyNzowMCAxOTk0ICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGNvbmZpZ3VyZSwgY29uZmlnLmguaW4pOiBDb21tZW50IG91dCBydWxlcy4KClRodSBKYW4gIDYgMTg6MDg6MDggMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChiaW5wcmVmaXgsIG1hbnByZWZpeCk6IE5ldyB2YXJpYWJsZXMuCgkoaW5zdG5hbWUpOiBWYXJpYWJsZSByZW1vdmVkLgoJKGluc3RhbGwpOiBVc2UgJCh7YmluLG1hbn1wcmVmaXgpbWFrZSBpbiBwbGFjZSBvZiAkKGluc3RuYW1lKS4KCUZpbGUgdGFyZ2V0cyBsaWtld2lzZWQgcmVuYW1lZC4KCk1vbiBKYW4gIDMgMTc6NTA6MjUgMTk5NCAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy43MCByZWxlYXNlZC4KClRodSBEZWMgMjMgMTQ6NDY6NTQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OS4zLgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IEluc2lkZSBtdWx0aS13b3JkIGFyY2hpdmUgcmVmCgl0cmFuc2xhdGlvbiBsb29wLCBjaGVjayBORVcxPT0wIGF0IGVuZCBhbmQgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgoKCSogR05VbWFrZWZpbGUgKG1ha2UtJCh2ZXJzaW9uKS50YXIpOiBEaXN0cmlidXRlIGluc3RhbGwuc2guCgkqIGluc3RhbGwuc2g6IE5ldyBmaWxlLgoKCSogY29uZmlndXJlLmluIChTQ0NTX0dFVF9NSU5VU19HIGNoZWNrKTogUHV0IHJlZGlyZWN0aW9uIGZvciBhZG1pbgoJY21kcyBvdXRzaWRlIHN1YnNoZWxsIHBhcmVucywgdG8gYXZvaWQgImNvbW1hbmQgbm90IGZvdW5kIiBtc2dzCglmcm9tIHRoZSBzaGVsbC4KCldlZCBEZWMgMjIgMTc6MDA6NDMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbiAoU0NDU19HRVRfTUlOVVNfRyBjaGVjayk6IFB1dCAtRyBmbGFnIGxhc3QgaW4gZ2V0IGNtZC4KCVJlZGlyZWN0IG91dHB1dCAmIGVycm9yIGZyb20gZ2V0IHRvIC9kZXYvbnVsbC4KCUZpeCByZXZlcnNlZCBzZW5zZSBvZiB0ZXN0LgoKRnJpIERlYyAxNyAxNTozMTozNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluIChTQ0NTX0dFVF9NSU5VU19HIGNoZWNrKTogVXNlIHBhcmVucyBpbnN0ZWFkIG9mCglicmFjZXMgaW5zaWRlIGlmIGNvbmRpdGlvbiBjb21tYW5kOyBzb21lIHNoZWxscyBsb3NlLgoKVGh1IERlYyAxNiAxNToxMDoyMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY5LjIuCgoJKiBhcnNjYW4uYyBbTV9VTklYXTogTW92ZSAjdW5kZWYgTV9YRU5JWCBmb3IgUE9SVEFSIHN0dWZmLgoJKFBPUlRBUikgW01fWEVOSVhdOiBEZWZpbmUgdG8gMCBpbnN0ZWFkIG9mIDEuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBPbmx5IGV4cG9ydCBNQUtFRkxBR1MgaWYgIUFMTC4KCldlZCBEZWMgMTUgMTc6NDc6NDggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IENhc3QgcmVzdWx0IG9mIHBvaW50ZXIgYXJpdGggdG8gdW5zaWduZWQgaW50CgliZWZvcmUgcGFzc2luZyB0byBkZWZpbmVfdmFyaWFibGUgZm9yIGVudmFycy4gIE1hdHRlcnMgd2hlbgoJc2l6ZW9mKHVuc2lnbmVkKSE9c2l6ZW9mKHB0cmRpZmZfdCkuCgpUdWUgRGVjIDE0IDE0OjIxOjE2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IEFkZCBuZXcgY2hlY2sgZm9yIFNDQ1NfR0VUX01JTlVTX0cuCgkqIGNvbmZpZy5oLmluOiBBZGQgI3VuZGVmIFNDQ1NfR0VUX01JTlVTX0cuCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF90ZXJtaW5hbF9ydWxlcyk6IFVzZSBgJChTQ0NTX09VVFBVVF9PUFRJT04pJyBpbgoJcGxhY2Ugb2YgYC1HICRAJyBpbiBTQ0NTIGNvbW1hbmRzLgoJKGRlZmF1bHRfdmFyaWFibGVzKSBbU0NDU19HRVRfTUlOVVNfR106IERlZmluZSBTQ0NTX09VVFBVVF9PUFRJT04KCXRvICItRyRAIi4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogUHV0IHRvdWNoIHN0YW1wLWNvbmZpZyBpbiBzZWNvbmQgYXJnCgkoc28gaXQgZ29lcyBpbiBjb25maWcuc3RhdHVzKSwgcmF0aGVyIHRoYW4gYWZ0ZXJ3YXJkLgoKCSogYXIuYyAoYXJfbWVtYmVyX2RhdGUpOiBEb24ndCBjYWxsIGVudGVyX2ZpbGUgb24gdGhlIGFyY2hpdmUgZmlsZQoJaWYgaXQgZG9lc24ndCBleGlzdCAoYnkgZmlsZV9leGlzdHNfcCkuCgoJKiBjb21wYXRNYWtlZmlsZSAoJChpbmZvZGlyKS9tYWtlLmluZm8pOiBSZXBsYWNlIGAkJGQvZm9vLmluZm8nCgl3aXRoIGAkJGRpci9tYWtlLmluZm8nIGluIGluc3RhbGwtaW5mbyBpbnZvY2F0aW9uIChvb3BzKS4KCgkqIHZwYXRoLmMgKGNvbnN0cnVjdF92cGF0aF9saXN0KTogT25seSBzZXQgTEFTVFBBVEggc2V0IFBBVEggd2hlbgoJd2UgZG8gbm90IHVubGluayBhbmQgZnJlZSBQQVRILgoKCSogZmlsZS5jIChwcmludF9maWxlX2RhdGFfYmFzZSk6IEZpeCBpbnZlcnRlZCBjYWxjdWxhdGlvbiBmb3IKCWF2ZXJhZ2UgZmlsZXMgcGVyIGhhc2ggYnVja2V0LgoKCSogcmVhZC5jIChyZWFkbGluZSk6IFdoZW4gd2Ugc2VlIGEgTlVMLCBnaXZlIG9ubHkgYSB3YXJuaW5nIGFuZAoJc3ludGhlc2l6ZSBhIG5ld2xpbmUgdG8gdGVybWluYXRlIHRoZSBidWlsZGluZyBsaW5lICh1c2VkIHRvCglmYXRhbCkuICBNb3ZlIGZnZXRzIGNhbGwgaW50byB0aGUgbG9vcCBjb25kaXRpb24sIGFuZCBhZnRlciB0aGUKCWxvb3AgdGVzdCBmZXJyb3IgKHVzZWQgdG8gdGVzdCAhZmVvZiBpbiB0aGUgbG9vcCkuCgpGcmkgRGVjICAzIDE2OjQwOjMxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBzdHJlcnJvciBpbiBBQ19IQVZFX0ZVTkNTLgoKVGh1IERlYyAgMiAxNTozNzo1MCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCURpZmZlcmVudGlhdGUgZGlmZmVyZW50IGZsYXZvcnMgb2YgbWlzc2luZyBtYWtlZmlsZSBlcnJvciBtc2dzLAoJcmVtb3ZpbmcgZ3JhdHVpdG91cyBgZm9wZW46ICcgYW5kIGdpdmluZyBjYWxsZXIgZm9yIGluY2x1ZGVkIG1ha2VmaWxlcy4KCSogbWlzYy5jIFshIEhBVkVfU1RSRVJST1JdOiBEZWZpbmUgb3VyIG93biBzdHJlcnJvciBoZXJlLgoJKHBlcnJvcl93aXRoX25hbWUsIHBmYXRhbF93aXRoX25hbWUpOiBVc2Ugc3RyZXJyb3IgaW5zdGVhZCBvZgoJcmVwbGljYXRpbmcgaXRzIGZ1bmN0aW9uYWxpdHkuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJldHVybiBpbnQgaW5zdGVhZCBvZiB2b2lkLgoJKHJlYWRfYWxsX21ha2VmaWxlcywgcmVhZF9tYWtlZmlsZSk6IENoYW5nZSBjYWxsZXJzIHRvIG5vdGljZSB6ZXJvCglyZXR1cm4gYW5kIGdpdmUgZXJyb3IgbXNnLgoKVGh1IE5vdiAxMSAxMTo0NzozNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY5LjEuCgoJKiBkZWZhdWx0LmM6IFB1dCBgLUcgJEAnIGJlZm9yZSAkPCBpbiBTQ0NTIGNtZHMuCgpXZWQgTm92IDEwIDA2OjA2OjE0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBBZnRlciB0cnlpbmcgYSB2YXJpYWJsZSBkZWZuLCBub3RpY2UgaWYKCXRoZSBsaW5lIGJlZ2lucyB3aXRoIGEgdGFiLCBhbmQgZGlhZ25vc2UgYW4gZXJyb3IuCgpTdW4gTm92ICA3IDA4OjA3OjM3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjkuCgpXZWQgTm92ICAzIDA2OjU0OjMzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguMTAuCgoJKiBpbXBsaWNpdC5jICh0cnlfaW1wbGljaXRfcnVsZSk6IExvb2sgZm9yIGEgbm9ybWFsIHJ1bGUgYmVmb3JlIGFuCglhcmNoaXZlIHJ1bGUuCgpGcmkgT2N0IDI5IDE2OjQ1OjI4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb246IGBzb3J0Jyk6IERvdWJsZSBOV09SRFMgd2hlbiBpdAoJb3ZlcmZsb3dzLCBpbnN0ZWFkIG9mIGFkZGluZyBmaXZlLgoKCSogY29tcGF0TWFrZWZpbGUgKGNsZWFuKTogUmVtb3ZlIGxvYWRhdmcuCgpXZWQgT2N0IDI3IDE3OjU4OjMzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguOS4KCgkqIGZpbGUuaCAoTkVXX01USU1FKTogRGVmaW5lIG5ldyBtYWNyby4KCSogbWFpbi5jIChtYWluKTogU2V0IHRpbWUgb2YgTkVXX0ZJTEVTIHRvIE5FV19NVElNRSwgbm90IHRvCgljdXJyZW50IHRpbWUgcmV0dXJuZWQgZnJvbSBzeXN0ZW0uICBSZW1vdmVkIHZhcmlhYmxlIE5PVy4KCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogVXNlIE5FV19NVElNRSBpbiBwbGFjZSBvZgoJY3VycmVudCB0aW1lIGhlcmUgdG9vLgoKVHVlIE9jdCAyNiAxOTo0NTozNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjguCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IERvbid0IGNsZWFyIE1VU1RfTUFLRSB3aGVuIEZJTEUgaGFzIG5vCgljbWRzIGFuZCAhREVQU19DSEFOR0VEIHVubGVzcyBhbHNvICFOT0VYSVNULgoKTW9uIE9jdCAyNSAxNToyNToyMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFdoZW4gY29udmVydGluZyBtdWx0aS13b3JkIGFyY2hpdmUKCXJlZnMsIGlnbm9yZSBhIHdvcmQgYmVnaW5uaW5nIHdpdGggYSAnKCcuCgpGcmkgT2N0IDIyIDAyOjUzOjM4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBzeXMvdGltZWIuaC4KCSogbWFrZS5oIFtIQVZFX1NZU19USU1FQl9IXTogVGVzdCB0aGlzIGJlZm9yZSBpbmNsdWRpbmcgaXQuCgpUaHUgT2N0IDIxIDE2OjQ4OjE3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguNy4KCgkqIHJ1bGUuYyAoY29udmVydF9zdWZmaXhfcnVsZSk6IE5ldyBsb2NhbCBUQVJHUEVSQ0VOVC4gIFNldCBpdCB0bwoJVEFSR05BTUUrMSBmb3IgIiglLm8pIiwgdG8gVEFSR05BTUUgZm9yICIlLj8iLiAgVXNlIGl0IGluIHBsYWNlIG9mCglUQVJHTkFNRSB0byBpbml0aWFsaXplIFBFUkNFTlRTWzBdLgoKTW9uIE9jdCAxOCAwNjo0OTozNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBVc2UgQUNfSEFWRV9IRUFERVJTKHVuaXN0ZC5oKSBpbnN0ZWFkIG9mIEFDX1VOSVNURF9ILgoJUmVtb3ZlIEFDX1VTRzsgaXQgaXMgbm8gbG9uZ2VyIHVzZWQuCgoJKiBmaWxlLmMgKHByaW50X2ZpbGUpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKCXByaW50X2ZpbGVfZGF0YV9iYXNlLgoJKHByaW50X2ZpbGVfZGF0YV9iYXNlKTogQ2FsbCBpdC4KCSogcnVsZS5jIChwcmludF9ydWxlKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCglwcmludF9ydWxlX2RhdGFfYmFzZS4KCShwcmludF9ydWxlX2RhdGFfYmFzZSk6IENhbGwgaXQuCgpUaHUgT2N0IDE0IDE0OjU0OjAzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkZWZhdWx0LmMgKGluc3RhbGxfZGVmYXVsdF9zdWZmaXhfcnVsZXMpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbgoJb3V0IG9mIGluc3RhbGxfZGVmYXVsdF9pbXBsaWNpdF9ydWxlcy4KCShpbnN0YWxsX2RlZmF1bHRfaW1wbGljaXRfcnVsZXMpOiBNb3ZlIHN1ZmZpeCBydWxlIGNvZGUgdGhlcmUuCgkqIG1ha2UuaDogRGVjbGFyZSBpbnN0YWxsX2RlZmF1bHRfc3VmZml4X3J1bGVzLgoJKiBtYWluLmMgKG1haW4pOiBDYWxsIGluc3RhbGxfZGVmYXVsdF9zdWZmaXhfcnVsZXMgYmVmb3JlIHJlYWRpbmcKCW1ha2VmaWxlcy4gIE1vdmUgY29udmVydF90b19wYXR0ZXJuIGNhbGwgYmVmb3JlCglpbnN0YWxsX2RlZmF1bHRfaW1wbGljaXRfcnVsZXMuCgoJKiBqb2IuaCAoc3RydWN0IGNoaWxkKTogTWFrZSBgcGlkJyBtZW1iZXIgdHlwZSBgcGlkX3QnIGluc3RlYWQgb2YKCWBpbnQnLgoKCSogY29tcGF0TWFrZWZpbGUgKFJBTkxJQik6IE5ldyB2YXJpYWJsZSwgc2V0IGJ5IGNvbmZpZ3VyZS4KCShnbG9iL2xpYmdsb2IuYSk6IFBhc3MgUkFOTElCIHZhbHVlIGRvd24gdG8gc3VibWFrZS4KCglGaXhlcyBmb3IgU0NPIDMuMiAiZGV2c3lzIDQuMiIgZnJvbSBwc3NAdGZuLmNvbSAoUGV0ZXIgU2Fsdml0dGkpLgoJKiBtYWtlLmg6IEluY2x1ZGUgPHN5cy90aW1lYi5oPiBiZWZvcmUgPHRpbWUuaD4gZm9yIFNDTyBsb3NzYWdlLgoJKiBqb2IuYyBbISBnZXRkdGFibGVzaXplXSBbISBIQVZFX0dFVERUQUJMRVNJWkVdOiBJZiBOT0ZJTEUgaXMgbm90CglkZWZpbmVkIGJ1dCBOT0ZJTEVTX01BWCBpcywgZGVmaW5lIGl0IHRvIGJlIHRoYXQuCgpNb24gT2N0IDExIDE5OjQ3OjMzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBHTlVtYWtlZmlsZSAobWFrZS0kKHZlcnNpb24pLnRhcik6IERlcGVuZCBvbiBhY2NvbmZpZy5oLCBzbyBpdAoJaXMgZGlzdHJpYnV0ZWQuCgpTdW4gT2N0ICAzIDE1OjE1OjMzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBBZGQgYC1HICRAJyB0byBTQ0NTIGdldCBjbWRzLgoKVHVlIFNlcCAyOCAxNDoxODoyMCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBBZGQgXiB0byBTSF9DSEFSUzsgaXQKCWlzIGFub3RoZXIgc3ltYm9sIGZvciB8IGluIHNvbWUgc2hlbGxzLgoJKiBtYWluLmMgKG1haW4pOiBBZGQgaXQgdG8gQ01EX0RFRlMgcXVvdGluZyBsaXN0IGFzIHdlbGwuCgpNb24gU2VwIDIwIDE4OjA1OjI0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFJlbW92ZSAnPScgZnJvbQoJU0hfQ0hBUlMuICBPbmx5IHB1bnQgb24gJz0nIGlmIGl0IGlzIHVucXVvdGVkIGluIGEgd29yZCBiZWZvcmUgdGhlCglmaXJzdCB3b3JkIHdpdGhvdXQgYW4gdW5xdW90ZWQgJz0nLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzKTogU2V0IHZfZXhwb3J0IGZvciBNQUtFRkxBR1MuCgpGcmkgU2VwIDE3IDAwOjM3OjE4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGVfMSk6IFVzZSAuREVGQVVMVCBjbWRzIGZvciBwaG9ueSB0YXJnZXRzLgoKCSogbWFrZS5oIFtfQUlYICYmIF9QT1NJWF9TT1VSQ0VdOiBEZWZpbmUgUE9TSVguCgoJKiBjb21tYW5kcy5jIChkZWxldGVfY2hpbGRfdGFyZ2V0cyk6IERvbid0IGRlbGV0ZSBwaG9ueSBmaWxlcy4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IFNldCBDT01NQU5EU19SRUNVUlNFIGluIEZMQUdTIGlmIHdlCglzZWUgYSBgKycgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tbWFuZCBsaW5lLgoKVGh1IFNlcCAgOSAxNzo1NzoxNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjYuCgpXZWQgU2VwICA4IDIwOjE0OjIxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBEZWZpbmUgTUFLRUZMQUdTIHdpdGggb19maWxlLCBub3Qgb19lbnYuCgpNb24gQXVnIDMwIDEyOjMxOjU4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBleHBhbmQuYyAodmFyaWFibGVfZXhwYW5kKTogRmF0YWwgb24gYW4gdW50ZXJtaW5hdGVkIHJlZmVyZW5jZS4KClRodSBBdWcgMTkgMTY6Mjc6NTMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC41LgoKCSogdmFyaWFibGUuYyAoZGVmaW5lX2F1dG9tYXRpY192YXJpYWJsZXMpOiBEZWZpbmUgbmV3IG9fZGVmYXVsdAoJdmFyaWFibGUgYE1BS0VfVkVSU0lPTicgZnJvbSB2ZXJzaW9uX3N0cmluZyBhbmQgcmVtb3RlX2Rlc2NyaXB0aW9uLgoKCSogbWFrZS5oICh2ZXJzaW9uX3N0cmluZywgcmVtb3RlX2Rlc2NyaXB0aW9uKTogRGVjbGFyZSB0aGVzZSBoZXJlLgoJKiBtYWluLmM6IERvbid0IGRlY2xhcmUgdmVyc2lvbl9zdHJpbmcuCgkocHJpbnRfdmVyc2lvbik6IERvbid0IGRlY2xhcmUgcmVtb3RlX2Rlc2NyaXB0aW9uLgoKV2VkIEF1ZyAxOCAxNTowMToyNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRnJlZSBzcGFjZSBwb2ludGVkIHRvIGJ5IENPTkRJVElPTkFMUwoJYmVmb3JlIHJlc3RvcmluZyB0aGUgb2xkIHBvaW50ZXIuCgpNb24gQXVnIDE2IDE3OjMzOjM2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoJChvYmpzKSk6IERlcGVuZCBvbiBjb25maWcuaC4KCgkqIEdOVW1ha2VmaWxlIChidWlsZC5zaC5pbik6IERlcGVuZCBvbiBjb21wYXRNYWtlZmlsZS4KCgkqIGNvbmZpZ3VyZS5pbjogVG91Y2ggc3RhbXAtY29uZmlnIGFmdGVyIEFDX09VVFBVVC4KCkZyaSBBdWcgMTMgMTY6MDQ6MjIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC40LgoKVGh1IEF1ZyAxMiAxNzoxODo1NyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oOiBJbmNsdWRlIDxjb25maWcuaD4gaW5zdGVhZCBvZiAiY29uZmlnLmgiLgoKV2VkIEF1ZyAxMSAwMjozNToyNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogTWFrZSBhbGwgdmFyaWFibGVzIGludGVybmVkIGZyb20gRU5WUCBiZSB2X2V4cG9ydC4KCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBJbiB2X2RlZmF1bHQgY2FzZSwgZG9uJ3QKCWNoZWNrIGZvciBhbiBvX2ZpbGUgdmFyaWFibGUgdGhhdCBgZ2V0ZW52JyBmaW5kcy4KCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogTmV3IGxvY2FsIHZhcmlhYmxlIEFOWV9MT0NBTDsgc2V0IGl0Cgl3aGlsZSBzZXR0aW5nIEFOWV9SRU1PVEUuICBJZiAhQU5ZX0xPQ0FMLCBkb24ndCB3YWl0IGZvciBsb2NhbCBraWRzLgoKCSogbWFpbi5jIChtYWluKTogRG9uJ3QgY2FsbCBkZWNvZGVfZW52X3N3aXRjaGVzIG9uIE1GTEFHUy4gIERPQyBUSElTLgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uKTogI2lmIDAgb3V0IGZyZWVpbmcgb2YgRU5WUCBzaW5jZSBpdAoJaXMgZW52aXJvbi4KCk1vbiBBdWcgIDkgMTc6Mzc6MjAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC4zLgoKCSogcmVtb3RlLXN0dWIuYyAocmVtb3RlX3N0YXR1cyk6IFNldCBlcnJubyB0byBFQ0hJTEQgYmVmb3JlIHJldHVybi4KCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBTY2FuIHRoZSBjaGFpbiBmb3IgcmVtb3RlIGNoaWxkcmVuIGFuZAoJbmV2ZXIgY2FsbCByZW1vdGVfc3RhdHVzIGlmIHRoZXJlIGFyZSBub25lLgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKTogI2lmIDAgb3V0IGNhbGxpbmcKCXRhcmdldF9lbnZpcm9ubWVudDsganVzdCBzZXQgRU5WUCB0byBlbnZpcm9uIGluc3RlYWQuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IENoZWNrIGZvciBuZWdhdGl2ZSByZXR1cm4gZnJvbQoJcmVtb3RlX3N0YXR1cyBhbmQgZmF0YWwgZm9yIGl0LgoJV2hlbiBibG9ja2luZyBsb2NhbCBjaGlsZCB3YWl0IHJldHVybnMgMCwgdGhlbiB0cnkgYSBibG9ja2luZyBjYWxsCgl0byByZW1vdGVfc3RhdHVzLgoKVHVlIEF1ZyAgMyAwMDoxOTowMCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGNsZWFuKTogRGVsZXRlIG1ha2UuaW5mbyogYW5kIG1ha2UuZHZpIGhlcmUuCgkoZGlzdGNsZWFuKTogTm90IGhlcmUuCgoJKiBkZXAuaCAoUk1fKik6IFVzZSAjZGVmaW5lcyBpbnN0ZWFkIG9mIGVudW0gdG8gYXZvaWQgbG9zc2FnZSBmcm9tCgljb21waWxlcnMgdGhhdCBkb24ndCBsaWtlIGVudW0gdmFsdWVzIHVzZWQgYXMgaW50cy4KCk1vbiBBdWcgIDIgMTY6NDY6MzQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChsb2FkYXZnKTogQWRkICQoTE9BRExJQkVTKS4KClN1biBBdWcgIDEgMTY6MDE6MTUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42OC4yLgoKCSogY29tcGF0TWFrZWZpbGUgKGxvYWRhdmcsIGNoZWNrLWxvYWRhdmcpOiBOZXcgdGFyZ2V0cy4KCShjaGVjayk6IERlcGVuZCBvbiBjaGVjay1sb2FkYXZnLgoKCSogY29tcGF0TWFrZWZpbGUgKGdsb2IvbGliZ2xvYi5hKTogRGVwZW5kIG9uIGNvbmZpZy5oLgoKCSogbWlzYy5jIChsb2dfYWNjZXNzKTogV3JpdGUgdG8gc3RkZXJyIGluc3RlYWQgb2Ygc3Rkb3V0LgoKRnJpIEp1bCAzMCAwMDowNzowMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY4LjEuCgpUaHUgSnVsIDI5IDIzOjI2OjQwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb25maWd1cmUuaW4gKFNZU19TSUdMSVNUX0RFQ0xBUkVEKTogSW4gdGVzdCBwcm9ncmFtIGluY2x1ZGUKCTx1bmlzdGQuaD4gI2lmZGVmIEhBVkVfVU5JU1REX0guCgoJKiBjb21wYXRNYWtlZmlsZSAoLlBIT05ZKTogUHV0IGFmdGVyIGBhbGwnIGV0IGFsLgoKCSogY29uZmlndXJlLmluOiBBZGQgQUNfSVJJWF9TVU4uCgpXZWQgSnVsIDI4IDE3OjQxOjEyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjguCgpNb24gSnVsIDI2IDE0OjM2OjQ5IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuOC4KClN1biBKdWwgMjUgMjI6MDk6MDggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny43LgoKCSogY29tcGF0TWFrZWZpbGUgKCQoaW5mb2RpcikvbWFrZS5pbmZvKTogRG9uJ3QgdXNlICQoaW5zdG5hbWUpLgoJUnVuIGluc3RhbGwtaW5mbyBzY3JpcHQgaWYgcHJlc2VudC4KCkZyaSBKdWwgMjMgMTY6MDM6NTAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaCBbU1RBVF9NQUNST1NfQlJPS0VOXTogVGVzdCB0aGlzIGluc3RlYWQgb2YgW3V0c10uCgoJKiBjb25maWd1cmUuaW46IEFkZCBBQ19TVEFUX01BQ1JPU19CUk9LRU4uCgpXZWQgSnVsIDE0IDE4OjQ4OjExIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuNi4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJlY29nbml6ZSBkaXJlY3RpdmUgYC1pbmNsdWRlJywgbGlrZQoJYGluY2x1ZGUnIGJ1dCBzZXRzIFJNX0RPTlRDQVJFIGZsYWcuCgoJKiB2YXJpYWJsZS5jICh0YXJnZXRfZW52aXJvbm1lbnQpOiBJZiBGSUxFIGlzIG5pbCwgdXNlCgljdXJyZW50X3ZhcmlhYmxlX3NldF9saXN0IGluIHBsYWNlIG9mIEZJTEUtPnZhcmlhYmxlcy4KCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKTogR2V0IGFuIGVudmlyb25tZW50IGZvcgoJdGhlIGNoaWxkIGZyb20gdGFyZ2V0X2Vudmlyb25tZW50IGluc3RlYWQgb2YgdXNpbmcgZW52aXJvbi4KCgkqIGRlcC5oOiBEZWNsYXJlIHJlYWRfYWxsX21ha2VmaWxlcyBoZXJlLgoJKFJNXyopOiBEZWZpbmUgbmV3IGVudW0gY29uc3RhbnRzLgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBTZWNvbmQgYXJnIGlzIEZMQUdTIGluc3RlYWQgb2YgVFlQRS4KCVRyZWF0IGl0IGFzIGEgYml0IG1hc2sgY29udGFpbmluZyBSTV8qLgoJKHJlYWRfYWxsX21ha2VmaWxlcyk6IEZvciBkZWZhdWx0IG1ha2VmaWxlcywgc2V0IEQtPmNoYW5nZWQgdG8KCVJNX0RPTlRDQVJFIGluc3RlYWQgb2YgMS4KCSogbWFpbi5jOiBEb24ndCBkZWNsYXJlIHJlYWRfYWxsX21ha2VmaWxlcyBoZXJlLgoJKG1haW4pOiBDaGVjayBgY2hhbmdlZCcgbWVtYmVyIG9mIHJlYWRfbWFrZWZpbGVzIGVsdHMgZm9yIFJNXyoKCWZsYWdzIGluc3RlYWQgb2Ygc3BlY2lmaWMgaW50ZWdlciB2YWx1ZXMuCgpNb24gSnVsIDEyIDIyOjQyOjE3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggW3NlcXVlbnQgJiYgaTM4Nl06ICN1bmRlZiBQT1NJWC4gIEZyb20gdHJvc3RAY3NlLm9naS5lZHUuCgpUaHUgSnVsICA4IDE5OjUxOjIzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IElmIEVMRU0gaXMgemVybyAwLCBmcmVlIFBBVFRFUk4KCWFzIHdlbGwgYXMgVlBBVEguCgkoYnVpbGRfdnBhdGhfbGlzdHMpOiBFbXB0eSBgdnBhdGhzJyBhcm91bmQgY29uc3RydWN0X3ZwYXRoX2xpc3QKCWNhbGwgZm9yICQoVlBBVEgpLiAgRXhwYW5kICQoc3RyaXAgJChWUEFUSCkpLCBub3QganVzdCAkKFZQQVRIKS4KCgkqIHJ1bGUuYyAoY29udmVydF9zdWZmaXhfcnVsZSk6IFVzZSBhbGxvY2EgaW5zdGVhZCBvZiB4bWFsbG9jIGZvcgoJUEVSQ0VOVFMsIHdob3NlIHN0b3JhZ2UgaXMgbm90IGNvbnN1bWVkIGJ5IGNyZWF0ZV9wYXR0ZXJuX3J1bGUuCgoJKiBtYWtlLmggW19fbWlwcyAmJiBfU1lTVFlQRV9TVlIzXTogI3VuZGVmIFBPU0lYLgoKV2VkIEp1biAzMCAxODoxMTo0MCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjUuCgoJKiBydWxlLmMgKG1heF9wYXR0ZXJuX3RhcmdldHMpOiBOZXcgdmFyaWFibGUuCgkoY291bnRfaW1wbGljaXRfcnVsZV9saW1pdHMpOiBDb21wdXRlIGl0cyB2YWx1ZS4KCSogcnVsZS5oOiBEZWNsYXJlIGl0LgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IE1ha2UgVFJZUlVMRVMgbWF4X3RhcmdldF9wYXR0ZXJucwoJdGltZXMgYmlnZ2VyLiAgTW92ZSBhZGRpbmcgbmV3IFRSWVJVTEVTIGVsdCBpbnNpZGUgdGhlIGlubmVyCgl0YXJnZXRzIGxvb3AsIHNvIGVhY2ggbWF0Y2hpbmcgdGFyZ2V0IGdldHMgaXRzIG93biBlbHQgaW4gTUFUQ0hFUwoJYW5kIENIRUNLRURfTEFTVFNMQVNILgoKCSogZmlsZS5jIChyZW1vdmVfaW50ZXJtZWRpYXRlcyk6IElmIFNJRyE9MCBzYXkgYGludGVybWVkaWF0ZSBmaWxlJwoJaW5zdGVhZCBvZiBqdXN0IGBmaWxlJyBpbiBlcnJvciBtc2cuCgpGcmkgSnVuIDI1IDE0OjU1OjE1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndik6IFR1cm4gb2ZmCgktLXdhcm4tdW5kZWZpbmVkLXZhcmlhYmxlcyBhcm91bmQgZXhwYW5zaW9uIG9mIFNIRUxMIGFuZCBJRlMuCgkqIHJlYWQuYyAodGlsZGVfZXhwYW5kKTogTGlrZXdpc2UgZm9yIEhPTUUuCgkocmVhZF9hbGxfbWFrZWZpbGVzKTogTGlrZXdpc2UgZm9yIE1BS0VGSUxFUy4KCSogdnBhdGguYyAoYnVpbGRfdnBhdGhfbGlzdHMpOiBMaWtld2lzZSBmb3IgVlBBVEguCgoJKiBtYWluLmMgKHdhcm5fdW5kZWZpbmVkX3ZhcmlhYmxlc19mbGFnKTogTmV3IGZsYWcgdmFyaWFibGUuCgkoc3dpdGNoZXMpOiBBZGQgLS13YXJuLXVuZGVmaW5lZC12YXJpYWJsZXMuCgkqIG1ha2UuaCAod2Fybl91bmRlZmluZWRfdmFyaWFibGVzX2ZsYWcpOiBEZWNsYXJlIGl0LgoJKiBleHBhbmQuYyAod2Fybl91bmRlZmluZWQpOiBOZXcgZnVuY3Rpb24uCgkocmVmZXJlbmNlX3ZhcmlhYmxlKTogQ2FsbCBpdCBpZiB0aGUgdmFyaWFibGUgaXMgdW5kZWZpbmVkLgoJKHZhcmlhYmxlX2V4cGFuZCk6IEluIHN1YnN0aXR1dGlvbiByZWYsIGNhbGwgd2Fybl91bmRlZmluZWQgaWYgdGhlCgl2YXJpYWJsZSBpcyB1bmRlZmluZWQuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfcGF0dGVybl9ydWxlcyk6IEFkZCBgJS5jOiAlLncgJS5jaCcgYW5kCglgJS50ZXg6ICUudyAlLmNoJyBydWxlcy4KCShkZWZhdWx0X3N1ZmZpeF9ydWxlczogLncuYywgLncudGV4KTogUGFzcyB0aHJlZSBhcmdzOiAkPCAtICRALgoJKGRlZmF1bHRfc3VmZml4ZXMpOiBBZGQgYC5jaCcuCgpNb24gSnVuIDIxIDE3OjU1OjM5IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfc3VmZml4ZXMpOiBSZXBsYWNlIGAuY3dlYicgd2l0aCBgLncnLgoJKGRlZmF1bHRfc3VmZml4X3J1bGVzKTogUmVuYW1lIGAuY3dlYi5jJyBhbmQgYC5jd2ViLnRleCcgdG8gYC53LmMnCglhbmQgYC53LnRleCcuCgpGcmkgSnVuIDExIDE0OjQyOjA5IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoJChiaW5kaXIpLyQoaW5zdG5hbWUpKTogQWRkIG1pc3NpbmcgYmFja3NsYXNoLgoKVGh1IEp1biAxMCAxODoxNDowOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjQuCgoJKiByZWFkLmMgKG11bHRpX2dsb2IpOiBEb24ndCBmcmVlIE9MRCBhbmQgT0xELT5uYW1lIGluIHRoZQoJRk9VTkQhPTAgZm9yay4gIFVzZSBuZXcgYmxvY2stbG9jYWwgdmFyaWFibGUgRiBpbnN0ZWFkIG9mCgljbG9iYmVyaW5nIE9MRC4KCgkqIGFyLmMgKGdsb2JfcGF0dGVybl9wKTogTmV3IGZ1bmN0aW9uLCBzbmFyZmVkIGZyb20gZ2xvYi9nbG9iLmMuCgkoYXJfZ2xvYik6IENhbGwgaXQ7IHJldHVybiBuaWwgaW1tZWRpYXRlbHkgaWYgTUVNQkVSX1BBVFRFUk4KCWNvbnRhaW5zIG5vIG1ldGFjaGFyYWN0ZXJzLgoKV2VkIEp1biAgOSAxNjoyNTozNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogYXIuYyAoYXJfZ2xvYntfbWF0Y2gsX2FscGhhY29tcGFyZX0pOiBOZXcgZnVuY3Rpb24uCgoJKiBkZXAuaCBbISBOT19BUkNISVZFU106IERlY2xhcmUgaXQuCgkqIHJlYWQuYyAobXVsdGlfZ2xvYikgWyEgTk9fQVJDSElWRVNdOiBVc2UgaXQgb24gYXJjaGl2ZSBtZW1iZXIgZWx0cy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFBhc3MgZmxhZyAoMSkgdG8gcGFyc2VfZmlsZV9zZXEsIG5vdCB0bwoJbXVsdGlfZ2xvYiAod2hpY2ggZG9lc24ndCB0YWtlIGEgM3JkIGFyZykuCgkqIHJ1bGUuYyAoaW5zdGFsbF9wYXR0ZXJuX3J1bGUpOiBMaWtld2lzZS4KCSogZGVmYXVsdC5jIChzZXRfZGVmYXVsdF9zdWZmaXhlcyk6IEhlcmUgdG9vLgoJKiBmdW5jdGlvbi5jIChzdHJpbmdfZ2xvYik6IERvbid0IHBhc3MgZ3JhdHVpdG91cyBhcmcgdG8gbXVsdGlfZ2xvYi4KCgkqIHJlYWQuYyAocGFyc2VfZmlsZV9zZXEpIFshIE5PX0FSQ0hJVkVTXTogQWRkIHBvc3QtcHJvY2Vzc2luZwoJbG9vcCB0byB0cmFuc2xhdGUgYXJjaGl2ZSByZWZzICJsaWIoYSBiKSIgaW50byAibGliKGEpIGxpYihiKSIuCgpNb24gSnVuICA3IDE5OjI2OjUxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoaW5zdGFsbGRpcnMpOiBBY3R1YWxseSBwYXNzIGRpcmVjdG9yeSBuYW1lcy4KCSgkKGJpbmRpcikvJChpbnN0bmFtZSkpOiBUZXN0IGNoZ3JwJiZjaG1vZCBleGl0IHN0YXR1cyB3aXRoIGBpZic7CglpZiBpdCBmYWlscywgZWNobyBhIHdhcm5pbmcgbXNnLCBidXQgZG9uJ3QgbWFrZSB0aGUgcnVsZSBmYWlsLgoKCSogcmVhZC5jICh0aWxkZV9leHBhbmQpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YgdGlsZGVfZXhwYW5kLgoJKG11bHRpX2dsb2IpOiBDYWxsIGl0LgoJKGNvbnN0cnVjdF9pbmNsdWRlX3BhdGgpOiBFeHBhbmQgfiBpbiBkaXJlY3RvcnkgbmFtZXMuCgkqIGRlcC5oOiBEZWNsYXJlIHRpbGRlX2V4cGFuZC4KCSogbWFpbi5jIChlbnRlcl9jb21tYW5kX2xpbmVfZmlsZSk6IEV4cGFuZCB+IGF0IHRoZSBzdGFydCBvZiBOQU1FLgoJKG1haW4pOiBFeHBhbmQgfiBpbiAtQyBhcmdzLgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBFeHBhbmQgfiBpbiBGSUxFTkFNRSB1bmxlc3MgVFlQRT09Mi4KCkZyaSBKdW4gIDQgMTM6MzQ6NDcgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoZGVjb2RlX2Vudl9zd2l0Y2hlcyk6IFVzZSB4bWFsbG9jIGluc3RlYWQgb2YgYWxsb2NhIGZvciBBUkdTLgoKCSogbWFpbi5jIChtYWluKTogUHV0IHJlc3VsdCBvZiBhbGxvY2EgaW4gdGVtcG9yYXJ5IHZhcmlhYmxlIHdpdGgKCXNpbXBsZSBhc3NpZ25tZW50LCB0byBtYWtlIFNHSSBjb21waWxlciBoYXBweS4KClRodSBKdW4gIDMgMjA6MTU6NDYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Ny4zLgoKCSogbWFpbi5jIChtYWluKTogQmVmb3JlIHJlLWV4ZWNpbmcsIHJlbW92ZSBpbnRlcm1lZGlhdGUgZmlsZXMsIGFuZAoJcHJpbnQgdGhlIGRhdGEgYmFzZSB1bmRlciAtcC4gIFNleGllciBkZWJ1Z2dpbmcgbWVzc2FnZS4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogQWxsb2NhdGUgYW4gZXh0cmEgY29weSBvZiB0aGUgbmFtZQoJb2YgYSB3aW5uaW5nIGludGVybWVkaWF0ZSBmaWxlIHdoZW4gcHV0dGluZyBpdCBpbiBGT1VORF9GSUxFUy4KCldlZCBKdW4gIDIgMTY6Mzg6MDggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFBhc3MgZmxhZyAoMSkgdG8gcGFyc2VfZmlsZV9zZXEsIG5vdCB0bwoJbXVsdGlfZ2xvYiAod2hpY2ggZG9lc24ndCB0YWtlIGEgM3JkIGFyZykuCgoJKiBkaXIuYyAoZGlyX2NvbnRlbnRzX2ZpbGVfZXhpc3RzX3ApOiBXaGVuIHJlYWRpbmcgZGlyZW50cywgaWdub3JlCgljaGFycyB3aXRoaW4gRF9OQU1MRU4gdGhhdCBhcmUgTlVMcy4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogRG9uJ3Qgc2F2ZXN0cmluZyBBUkdWWzBdIHRvIHB1dCBpdAoJaW50byBgb3RoZXJfYXJncycuCglGb3Igc3RyaW5nIHN3aXRjaCwgZG9uJ3Qgc2F2ZXN0cmluZyBgb3B0YXJnJy4KCShtYWluKTogRG9uJ3QgZnJlZSBlbHRzIG9mIG1ha2VmaWxlcy0+bGlzdCB0aGF0IGFyZSAiLSIuCglVc2UgYWxsb2NhJ2QgcmF0aGVyIHRoYW4gc2F2ZXN0cmluZydkIHN0b3JhZ2UgZm9yIGVsdHMgb2YKCW1ha2VmaWxlcy0+bGlzdCB0aGF0IGFyZSB0ZW1wb3JhcnkgZmlsZSBuYW1lcy4KCSogcmVhZC5jIChyZWFkX2FsbF9tYWtlZmlsZXMpOiBEb24ndCBmcmVlICpNQUtFRklMRVMuCgkqIGZpbGUuYyAoZW50ZXJfZmlsZSk6IERvbid0IHN0cmlwIGAuLydzLgoJKiBtYWluLmMgKGVudGVyX2NvbW1hbmRfbGluZV9maWxlKTogTmV3IGZ1bmN0aW9uLgoJKG1haW4pOiBVc2UgaXQgaW4gcGxhY2Ugb2YgZW50ZXJfZmlsZSBmb3IgY29tbWFuZC1saW5lIGdvYWxzIGZyb20KCW90aGVyX2ZpbGVzLCBhbmQgZm9yIG9sZF9maWxlcyBhbmQgbmV3X2ZpbGVzLgoKTW9uIE1heSAzMSAxODo0MTo0MCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY3LjIuCgoJKiBjb21wYXRNYWtlZmlsZSAoLlNVRkZJWEVTKTogQWRkIC5pbmZvLgoJKCQoaW5mb2RpcikvJChpbnN0bmFtZSkuaW5mbyk6IEZpbmQgbWFrZS5pbmZvKiBpbiBjd2QgaWYgdGhlcmUsCgllbHNlIGluICRzcmNkaXIuICBVc2UgYmFzZW5hbWUgdG8gcmVtb3ZlIGRpciBuYW1lIGZyb20gaW5zdGFsbGVkIG5hbWUuCgpUaHUgTWF5IDI3IDE3OjM1OjAyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IFdoZW4gaW50ZXJuaW5nIEZPVU5EX0ZJTEVTLCB0cnkKCWxvb2t1cF9maWxlIGZpcnN0OyBpZiBmb3VuZCwgZnJlZSB0aGUgc3RvcmFnZSBmb3Igb3VyIGNvcHkgb2YgdGhlIG5hbWUuCgpXZWQgTWF5IDI2IDE0OjMxOjIwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuMS4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogSW4gdXNhZ2UgbXNnLCB3cml0ZSBgLS1zd2l0Y2g9QVJHJyBvcgoJYC0tc3dpdGNoWz1PUFRBUkddJyByYXRoZXIgdGhhbiBgLS1zd2l0Y2ggQVJHJyBvciBgLS1zd2l0Y2ggW0FSR10nLgoKTW9uIE1heSAyNCAxNjoxNzozMSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcnVsZS5jIChjb252ZXJ0X3N1ZmZpeF9ydWxlKTogTmV3IGZ1bmN0aW9uLgoJKGNvbnZlcnRfdG9fcGF0dGVybik6IFVzZSBpdCBpbnN0ZWFkIG9mIGRvaW5nIGFsbCB0aGUgd29yayBoZXJlCglzZXZlcmFsIHRpbWVzLgoJRm9yIHRhcmdldCBzdWZmaXggYC5hJywgZ2VuZXJhdGUgYm90aCB0aGUgYXJjaGl2ZSBtYWdpYyBydWxlIGFuZAoJdGhlIG5vcm1hbCBydWxlLgoKCSogY29tcGF0TWFrZWZpbGUgKGRpc3RjbGVhbik6IFJlbW92ZSBzdGFtcC1jb25maWcuCgpTYXQgTWF5IDIyIDE2OjE1OjE4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjcuCgoJKiBmaWxlLmMgKHJlbW92ZV9pbnRlcm1lZGlhdGVzKTogRG9uJ3Qgd3JpdGUgZXh0cmEgc3BhY2UgYWZ0ZXIgYHJtJy4KCgkqIG1haW4uYyAoc3RydWN0IGNvbW1hbmRfc3dpdGNoLnR5cGUpOiBSZW1vdmUgYHVzYWdlX2FuZF9leGl0Jy4KCShwcmludF91c2FnZV9mbGFnKTogTmV3IHZhcmlhYmxlLgoJKHN3aXRjaGVzOiAtLWhlbHApOiBNYWtlIHR5cGUgYGZsYWcnLCB0byBzZXQgcHJpbnRfdXNhZ2VfZmxhZy4KCShpbml0X3N3aXRjaGVzKTogUmVtb3ZlIGB1c2FnZV9hbmRfZXhpdCcgY2FzZS4KCShkZWNvZGVfc3dpdGNoZXMpOiBMaWtld2lzZS4KCShkZWNvZGVfc3dpdGNoZXMpOiBQcmludCB1c2FnZSBpZiBwcmludF91c2FnZV9mbGFnIGlzIHNldC4KCVdoZW4gcHJpbnRpbmcgdXNhZ2UsIGRpZSB3aXRoIHN0YXR1cyBvZiBCQUQuCgkobWFpbik6IERpZSB3aXRoIDAgaWYgcHJpbnRfdmVyc2lvbl9mbGFnLgoKRnJpIE1heSAyMSAxNjowOToyOCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY2LgoKV2VkIE1heSAxOSAyMTozMDo0NCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGluc3RhbGxkaXJzKTogTmV3IHRhcmdldC4KCShpbnN0YWxsKTogRGVwZW5kIG9uIGl0LgoKU3VuIE1heSAxNiAyMDoxNTowNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY1LjIuCgpGcmkgTWF5IDE0IDE2OjQwOjA5IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IEluIHJlbW92YWwgbG9vcCBmb3IgRElSUEFUSD09MCwKCXNldCBMQVNUUEFUSCB0byBQQVRILCBub3QgTkVYVC4KCgkqIGRpci5jIChyZWFkX2RpcnN0cmVhbSk6IEJyZWFrIG91dCBvZiBsb29wIGFmdGVyIGluY3JlbWVudGluZwoJRFMtPmJ1Y2tldHMgc3VjaCB0aGF0IGl0IHJlYWNoZXMgRElSRklMRV9CVUNLRVRTOyBhdm9pZCB0cnlpbmcgdG8KCWRlcmVmZXJlbmNlIERTLT5jb250ZW50cy0+ZmlsZXNbRElSRklMRV9CVUNLRVRTXS4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENsZWFyIG5vX3RhcmdldHMgYWZ0ZXIgcmVhZGluZyBhCgl0YXJnZXRmdWwgcnVsZSBsaW5lLgoKCSogbWFpbi5jIChtYWluKTogSWYgcHJpbnRfdmVyc2lvbl9mbGFnIGlzIHNldCwgZXhpdCBhZnRlciBwcmludGluZwoJdGhlIHZlcnNpb24uCgkoc3dpdGNoZXMpOiBDaGFuZ2UgLS12ZXJzaW9uIGRvY3N0cmluZyB0byBzYXkgaXQgZXhpdHMuCgoJKiBtYWtlLmggW2J1dHRlcmZseV06ICN1bmRlZiBQT1NJWC4KCldlZCBNYXkgMTIgMTU6MjA6MjEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjUuMS4KCgkqIGFyc2Nhbi5jIChhcl9zY2FuKSBbISBBSUFNQUddOiBEb24ndCBkZWNsYXJlIExPTkdfTkFNRS4KCVtBSUFNQUddOiBQYXNzIFRSVU5DQVRFIGZsYWcgYXJnIHRvICgqRlVOQ1RJT04pLCBhbHdheXMgemVyby4KCgkqIGZ1bmN0aW9uLmMgKGhhbmRsZV9mdW5jdGlvbik6IFVzZSBmYXRhbCBpbnN0ZWFkIG9mCgltYWtlZmlsZV9mYXRhbCB3aGVuIHJlYWRpbmdfZmlsZW5hbWUgaXMgbmlsLgoKCSogY29uZmlndXJlLmluOiBBZGQgQUNfR0VUR1JPVVBTX1QuCgkqIGpvYi5jIChzZWFyY2hfcGF0aCk6IFVzZSBHRVRHUk9VUFNfVCBpbiBwbGFjZSBvZiBnaWRfdC4KClN1biBNYXkgIDkgMTU6NDE6MjUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42NS4KCkZyaSBNYXkgIDcgMTg6MzQ6NTYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZ1bmN0aW9uLmMgKGhhbmRsZV9mdW5jdGlvbik6IEZhdGFsIGZvciB1bm1hdGNoZWQgcGFyZW4uCgpUaHUgTWF5ICA2IDE2OjEzOjQxIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjQuMy4KCgkqIGNvbW1hbmRzLmMgKGhhbmRsaW5nX2ZhdGFsX3NpZ25hbCk6IE5ldyB2YXJpYWJsZS4KCShmYXRhbF9lcnJvcl9zaWduYWwpOiBTZXQgaXQuCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogQXZvaWQgbm9ucmVlbnRyYW50IG9wZXJhdGlvbnMgaWYgdGhhdCBpcyBzZXQuCgkqIG1ha2UuaDogRGVjbGFyZSBoYW5kbGluZ19mYXRhbF9zaWduYWwuCgoJKiBleHBhbmQuYyAocmVmZXJlbmNlX3ZhcmlhYmxlKTogTmV3IGZ1bmN0aW9uLCBzbmlwcGV0IG9mIGNvZGUKCWJyb2tlbiBvdXQgb2Ygc2ltcGxlLXJlZmVyZW5jZSBjYXNlIG9mIHZhcmlhYmxlX2V4cGFuZC4KCSh2YXJpYWJsZV9leHBhbmQpOiBVc2UgaXQgZm9yIHNpbXBsZSByZWZzLgoJKHZhcmlhYmxlX2V4cGFuZCk6IFdoZW4gY2hlY2tpbmcgZm9yIGEgY29tcHV0ZWQgdmFyaWFibGUgbmFtZSwKCW5vdGljZSBhIGNvbG9uIHRoYXQgY29tZXMgYmVmb3JlIHRoZSBmaW5hbCBDTE9TRVBBUkVOLiAgRXhwYW5kCglvbmx5IHVwIHRvIHRoZSBjb2xvbiwgYW5kIHRoZW4gcmVwbGFjZSB0aGUgcGVuZGluZyB0ZXh0IHdpdGggYQoJY29weSBjb250YWluaW5nIHRoZSBleHBhbmRlZCBuYW1lIGFuZCBmYWxsIHRocm91Z2ggdG8gc3Vic3QgcmVmCgloYW5kbGluZy4KCSh2YXJpYWJsZV9leHBhbmQpOiBEb24ndCBib3RoZXIgZXhwYW5kaW5nIHRoZSBuYW1lIGlmIGEgY29sb24KCWFwcGVhcnMgYmVmb3JlIHRoZSBmaXJzdCAkLgoJKGV4cGFuZF9hcmd1bWVudCk6IFVzZSBhbGxvY2EgaW5zdGVhZCBvZiBzYXZlc3RyaW5nLgoJKHZhcmlhYmxlX2V4cGFuZCk6IEZvciBzdWJzdCByZWYsIGV4cGFuZCBib3RoIHNpZGVzIG9mID0gYmVmb3JlCglwYXNzaW5nIHRvIFtwYXRdc3Vic3RfZXhwYW5kLiAgVXNlIGZpbmRfcGVyY2VudCBpbnN0ZWFkIG9mIGxpbmRleAoJdG8gY2hlY2sgdGhlIGxocyBmb3IgYSAlLgoKV2VkIE1heSAgNSAxNDo0NTo1MiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY0LjIuCgpNb24gTWF5ICAzIDE3OjAwOjMyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBhcnNjYW4uYyAoYXJfbmFtZV9lcXVhbCkgW0FJQU1BR106IEFib3J0IGlmIFRSVU5DQVRFRCBpcyBub256ZXJvLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUGFzcyBleHRyYSBhcmcgb2YgMSB0byBwYXJzZV9maWxlX3NlcSwKCW5vdCB0byBtdWx0aV9nbG9iLgoKVGh1IEFwciAyOSAxOTo0NzozMyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY0LjEuCgoJKiBhcnNjYW4uYyAoYXJfc2Nhbik6IE5ldyBsb2NhbCBmbGFnIHZhciBMT05HX05BTUUuICBTZXQgaXQgd2hlbgoJd2UgcmVhZCB0aGUgbWVtYmVyIG5hbWUgaW4gYW55IG9mIHRoZSBmYXNoaW9ucyB0aGF0IGFsbG93IGl0IHRvIGJlCglhcmJpdHJhcmlseSBsb25nLiAgUGFzcyBpdHMgbmVnYXRpb24gdG8gRlVOQ1RJT04uCgkoZGVzY3JpYmVfbWVtYmVyKTogVGFrZSBUUlVOQ0FURUQgZnJvbSBhcl9zY2FuIGFuZCBwcmludCBpdC4KCShhcl9uYW1lX2VxdWFsKTogVGFrZSBuZXcgYXJnIFRSVU5DQVRFRDsgaWYgbm9uemVybywgY29tcGFyZSBvbmx5Cgl0aGUgZmlyc3Qgc2l6ZW9mIChzdHJ1Y3QgYXJfaGRyLmFyX25hbWUpIGNoYXJzLgoJKGFyX21lbWJlcl9wb3MpOiBUYWtlIFRSVU5DQVRFRCBmcm9tIGFyX3NjYW4sIHBhc3MgdG8gYXJfbmFtZV9lcXVhbC4KCSogYXIuYyAoYXJfbWVtYmVyX2RhdGVfMSk6IExpa2V3aXNlLgoKV2VkIEFwciAyOCAyMToxODoyMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBCZWZvcmUgY2FsbGluZyBzdGFydF9qb2JfY29tbWFuZCB0byBzdGFydAoJdGhlIG5leHQgY29tbWFuZCBsaW5lLCByZXNldCBDLT5yZW1vdGUgYnkgY2FsbGluZyBzdGFydF9yZW1vdGVfam9iX3AuCgpNb24gQXByIDI2IDE1OjU2OjE1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogYXJzY2FuLmMgKGFyX3NjYW4pOiBOZXcgbG9jYWwgdmFyIE5BTUVNQVAuCglJbiBsb29wLCByZW5hbWUgTkFNRSB0byBOQU1FQlVGOyBuZXcgdmFyIE5BTUUgaXMgYSBwb2ludGVyOyBuZXcKCWZsYWcgSVNfTkFNRU1BUC4gIFdoZW4gZXh0cmFjdGluZyB0aGUgbWVtYmVyIG5hbWUsIGFsd2F5cyBwdXQgYQoJbnVsbCBhdCBpdHMgZW5kIGZpcnN0LiAgSWYgdGhlIG5hbWUgaXMgIi8vIiBvciAiL0FSRklMRU5BTUVTIiwgc2V0CglJU19OQU1FTUFQLiAgSWYgd2UgaGF2ZSBhbHJlYWR5IHJlYWQgaW4gTkFNRU1BUCwgYW5kIE5BTUUgbG9va3MKCWxpa2UgIiAvTiIsIGdldCBmdWxsIG5hbWUgZnJvbSBOQU1FTUFQK04uCglFbHNlIGlmIE5BTUUgbG9va3MgbGlrZSAiIzEvTiIsIHJlYWQgTiBjaGFycyBmcm9tIHRoZQoJZWx0IGRhdGEgdG8gYmUgdGhlIGZ1bGwgbmFtZS4gIEF0IGVuZCBvZiBsb29wLCBpZiBJU19OQU1FTUFQLCByZWFkCgl0aGUgZWx0J3MgZGF0YSBpbnRvIGFsbG9jYSdkIE5BTUVNQVAuCgkoYXJfbmFtZV9lcXVhbCk6ICNpZiAwIHRydW5jYXRpbmcgY29kZS4KCgkqIG1ha2UuaDogRG9uJ3QgZGVjbGFyZSB2Zm9yayBhdCBhbGwuICBJdCByZXR1cm5zIGludCBhbnl3YXksCgl1bmxlc3MgPHVuaXN0ZC5oPiBkZWNsYXJlZCBpdDsgYW5kIHdlIGNvbmZsaWN0ZWQgd2l0aCBzb21lIHN5c3RlbXMuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBJZiBGTEFHU1RSSU5HWzFdIGlzICctJywgZGVmaW5lCglNQUtFRkxBR1MgdG8gYWxsIG9mIEZMQUdTVFJJTkcsIG5vdCAmRkxBR1NUUklOR1sxXS4gIERvbid0IHdhbnQgdG8KCWRlZmluZSBpdCB0byBzb21ldGhpbmcgbGlrZSAiLW5vLXByaW50LWRpcmVjdG9yeSIuCglVc2UgJWcgZm9ybWF0IGluc3RlYWQgb2YgJWYgZm9yIGZsb2F0aW5nLXZhbHVlZCB0aGluZ3MuCgpUaHUgQXByIDIyIDE4OjQwOjU4IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBHTlVtYWtlZmlsZSAoTWFrZWZpbGUuaW4pOiBVc2UgYSBzdWJzdGl0dXRpb24gcmVmIG9uIG5vbGliLWRlcHMKCXRvIGNoYW5nZSByZW1vdGUtJS5kZXAgdG8gcmVtb3RlLXN0dWIuZGVwLgoKV2VkIEFwciAyMSAxNToxNzo1NCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjY0LgoKRnJpIEFwciAxNiAxNDoyMjoyMiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGluc3RhbGwpOiBSZW1vdmUgLSBwcmVmaXggZnJvbSBjaGdycCtjaG1vZC4KCgkqIFZlcnNpb24gMy42My44LgoKVGh1IEFwciAxNSAxODoyNDowNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogYWNjb25maWcuaDogTmV3IGZpbGU7IGNvbnRhaW5zICIjdW5kZWYgU0NDU19HRVQiIGZvciBhdXRvaGVhZGVyLgoJKiBjb25maWd1cmUuaW46IElmIC91c3Ivc2Njcy9nZXQgZXhpc3RzLCBkZWZpbmUgU0NDU19HRVQgdG8gdGhhdCwKCWVsc2UgdG8gImdldCIuCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpOiBTZXQgR0VUIHRvIG1hY3JvIFNDQ1NfR0VULgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFRha2UgZXh0cmEgYXJnIFNUUklQOyBzdHJpcCBgLi8nIG9ubHkKCWlmIG5vbnplcm8uICBJIGhvcGUgdGhpcyBpcyB0aGUgbGFzdCB0aW1lIHRoaXMgYXJndW1lbnQgaXMgYWRkZWQKCW9yIHJlbW92ZWQuCgkocmVhZF9tYWtlZmlsZSk6IFBhc3MgaXQgMSB3aGVuIHBhcnNpbmcgaW5jbHVkZSBmaWxlIG5hbWVzLgoJUGFzcyBpdCAxIHdoZW4gcGFyc2luZyB0YXJnZXQgZmlsZSBuYW1lcy4KCVBhc3MgaXQgMSB3aGVuIHBhcnNpbmcgc3RhdGljIHBhdHRlcm4gdGFyZ2V0IHBhdHRlcm4gbmFtZXMuCgkqIHJ1bGUuYyAoaW5zdGFsbF9wYXR0ZXJuX3J1bGUpOiBQYXNzIGl0IDEgd2hlbiBwYXJzaW5nIHJ1bGUgZGVwcy4KCSogZGVmYXVsdC5jIChzZXRfZGVmYXVsdF9zdWZmaXhlcyk6IFBhc3MgaXQgMSB3aGVuIHBhcnNpbmcKCWRlZmF1bHRfc3VmZml4ZXMuCgkqIGZ1bmN0aW9uLmMgKHN0cmluZ19nbG9iKTogUGFzcyBpdCAwIGhlcmUuCgpXZWQgQXByIDE0IDExOjMyOjA1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtaXNjLmMgKGxvZ19hY2Nlc3MpOiBOZXcgZnVuY3Rpb24uCgkoe2luaXQsdXNlcixtYWtlLGNoaWxkfV9hY2Nlc3MpOiBDYWxsIGl0LgoJKGNoaWxkX2FjY2Vzcyk6IEFib3J0IGlmICFhY2Nlc3NfaW5pdGVkLgoKCSogbWFpbi5jIChzd2l0Y2hlczogLS1uby1wcmludC1kaXJlY3RvcnkpOiBVc2UgMSBpbnN0ZWFkIG9mIC0xIGZvcgoJc2luZ2xlLWxldHRlciBvcHRpb24uCgkoaW5pdF9zd2l0Y2hlcywgZGVjb2RlX3N3aXRjaGVzLCBkZWZpbmVfbWFrZWZsYWdzKTogQW4gb3B0aW9uIHdpdGgKCW5vIHNpbmdsZS1sZXR0ZXIgdmVyc2lvbiBpcyBubyBsb25nZXIgaW5kaWNhdGVkIGJ5IGEgdmFsdWUgb2YgLTE7CglpbnN0ZWFkIGEgdmFsdWUgdGhhdCBpcyAhaXNhbG51bS4KCShpbml0X3N3aXRjaGVzKTogRG9uJ3QgcHV0IHN1Y2ggc3dpdGNoZXMgaW50byB0aGUgc3RyaW5nLCBvbmx5CglpbnRvIHRoZSBsb25nX29wdGlvbiB0YWJsZS4KCgkqIG1ha2UuaCBbIU5TSUddIFshX05TSUddOiAjZGVmaW5lIE5TSUcgMzIuCgoJKiBqb2IuYyBbSEFWRV9XQUlUUElEXTogUmVtb3ZlICN1bmRlZiBIQVZFX1VOSU9OX1dBSVQuICBBSVgncwoJYnNkY2MgZGVmaW5lZCBXSUYqIHRvIHVzZSB1bmlvbiB3YWl0LgoKCSogbWFpbi5jIChzdHJ1Y3QgY29tbWFuZF9zd2l0Y2gpOiBDaGFuZ2UgbWVtYmVyIGBjJyB0byB0eXBlIGludC4KCShzd2l0Y2hlcyk6IE1ha2UgY29uc3QuCgkoZGVjb2RlX3N3aXRjaGVzKTogVXNlIGBjb25zdCBzdHJ1Y3QgY29tbWFuZF9zd2l0Y2ggKicuCgkoZGVmaW5lX21ha2VmbGFncyk6IExpa2V3aXNlLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3N1ZmZpeF9ydWxlcyk6IEFkZCBgLW8gJEAnIHRvIG1ha2VpbmZvIHJ1bGVzLgoKTW9uIEFwciAxMiAxMjozMDowNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYzLjcuCgoJKiBjb25maWd1cmUuaW4gKEFDX0hBVkVfSEVBREVSUyk6IENoZWNrIGZvciBzdHJpbmcuaCBhbmQgbWVtb3J5LmguCglSZW1vdmVkIEFDX01FTU9SWV9ILgoJKiBtYWtlLmggW1VTRywgTmVYVF06IERvbid0IHRlc3QgdGhlc2UuCglbSEFWRV9TVFJJTkdfSF06IFRlc3QgdGhpcyB0byBpbmNsdWRlIHN0cmluZy5oIGFuZCBkZWZpbmUgQU5TSV9TVFJJTkcuCglbSEFWRV9NRU1PUllfSF06IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIE5FRURfTUVNT1JZX0guCglbISBBTlNJX1NUUklOR106IFB1dCBkZWNscyBvZiBiY29weSBldCBhbCBoZXJlLgoJW3NwYXJjXTogRG9uJ3QgdGVzdCB0aGlzIGZvciBhbGxvY2EuaDsgSEFWRV9BTExPQ0FfSCBpcyBzdWZmaWNpZW50LgoJW0hBVkVfU0lHU0VUTUFTS106IFRlc3QgdGhpcyByYXRoZXIgdGhhbiBVU0cuCglbX19HTlVfTElCUkFSWV9fIHx8IFBPU0lYXTogRG9uJ3QgI2luY2x1ZGUgPHVuaXN0ZC5oPiBhZ2Fpbi4KCSogbWFpbi5jIChtYWluKTogSGFuZGxlIFNJR0NITEQgaWYgZGVmaW5lZCwgYW5kIFNJR0NMRCBpZiBkZWZpbmVkLgoJSXQgZG9lc24ndCBodXJ0IHRvIGRvIGJvdGggaWYgdGhleSBhcmUgYm90aCBkZWZpbmVkLCBhbmQgdGVzdGluZwoJVVNHIGlzIHVzZWxlc3MuCgkqIGRpci5jOiBSYXRpb25hbGl6ZSBkaXJlY3RvcnkgaGVhZGVyIGNvbmRpdGlvbmFscy4KCSogYXJzY2FuLmMgW0hBVkVfRkNOVExfSF06IFRlc3QgdGhpcyByYXRoZXIgdGhhbiBVU0cgfHwgUE9TSVguCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfc3VmZml4ZXMpOiBBZGQgYC50eGluZm8nLgoJKGRlZmF1bHRfc3VmZml4X3J1bGVzKTogQWRkIGAudHhpbmZvLmluZm8nIGFuZCBgLnR4aW5mby5kdmknIHJ1bGVzLgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBSZXBsYWNlIFJFQ1VSU0lWRSBmbGFnCgl3aXRoIGVudW0gRkxBVk9SLCB3aGljaCBjYW4gYmUgc2ltcGxlLCByZWN1cnNpdmUsIG9yIGFwcGVuZC4KCVJlY29nbml6ZSArPSBhcyBhcHBlbmQgZmxhdm9yLiAgU2V0IG5ldyB2YXJpYWJsZSBWQUxVRSBpbiBhIHN3aXRjaAoJb24gRkxBVk9SLiAgRm9yIGFwcGVuZCBmbGF2b3IsIHByZXBlbmQgdGhlIHZhcmlhYmxlJ3Mgb2xkIHZhbHVlLgoJSWYgdGhlIHZhcmlhYmxlIHdhcyBwcmV2aW91c2x5IGRlZmluZWQgcmVjdXJzaXZlLCBzZXQgRkxBVk9SIHRvCglyZWN1cnNpdmU7IGlmIGl0IHdhcyBkZWZpbmVkIHNpbXBsZSwgZXhwYW5kIHRoZSBuZXcgdmFsdWUgYmVmb3JlCglhcHBlbmRpbmcgaXQgdG8gdGhlIG9sZCB2YWx1ZS4gIFBhc3MgUkVDVVJTSVZFIGZsYWcgdG8KCWRlZmluZV92YXJpYWJsZSBpZmYgRkxBVk9SID09IHJlY3Vyc2l2ZS4KCgkqIHZhcmlhYmxlLmMgKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogVXNlIGFsbG9jYSBhbmQgYmNvcHkgZm9yCglOQU1FLCBpbnN0ZWFkIG9mIHNhdmVzdHJpbmcuICBNaWdodCBhcyB3ZWxsIHVzZSBzdGFjayBzdG9yYWdlCglzaW5jZSB3ZSBmcmVlIGl0IGltbWVkaWF0ZWx5IGFueXdheS4KClRodSBBcHIgIDggMTg6MDQ6NDMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChzdGFydF93YWl0aW5nX2pvYnMpOiBNb3ZlIGRlY2wgb2YgSk9CIG91dHNpZGUgb2YgbG9vcC4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IFJlbmFtZSBgc3RydWN0IGZsYWcnIG1lbWJlciBgc3dpdGNoJwoJdG8gYGNzJywgd2hpY2ggaXMgbm90IGEgcmVzZXJ2ZWQgd29yZC4KCldlZCBBcHIgIDcgMTU6MzA6NTEgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChuZXdfam9iKTogQ2FsbCBzdGFydF93YWl0aW5nX2pvYnMgZmlyc3QgdGhpbmcuCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBDaGFuZ2VkIHJldHVybiB0eXBlIGZyb20gdm9pZCB0byBpbnQuCglSZXR1cm4gMCB3aGVuIHB1dHRpbmcgdGhlIGNoaWxkIG9uIHRoZSB3YWl0aW5nX2pvYnMgY2hhaW4uCgkoc3RhcnRfd2FpdGluZ19qb2JzKTogRG9uJ3QgY2hlY2sgbG9hZCBhbmQgam9iX3Nsb3RzIGhlcmUuCglBbHdheXMgdGFrZSBhIGpvYiBvZmYgdGhlIGNoYWluIGFuZCBjYWxsIHN0YXJ0X3dhaXRpbmdfam9iIG9uIGl0OwoJZ2l2ZSB1cCBhbmQgcmV0dXJuIHdoZW4gc3RhcnRfd2FpdGluZ19qb2IgcmV0dXJucyB6ZXJvLgoKCSogbWFpbi5jIChkZWZpbmVfbWFrZWZsYWdzOiBzdHJ1Y3QgZmxhZyk6IENoYW5nZSBtZW1iZXIgYGNoYXIgYycgdG8KCWBzdHJ1Y3QgY29tbWFuZF9zd2l0Y2ggKnN3aXRjaCcuCgkoQUREX0ZMQUcpOiBTZXQgdGhhdCB0byBDUyBpbnN0ZWFkIG9mIENTLT5jLgoJSWYgQ1MtPmMgaXMgLTEsIGluY3JlbWVudCBGTEFHU0xFTiBmb3IgdGhlIGxvbmcgbmFtZS4KCVdoZW4gd3JpdGluZyBvdXQgRkxBR1MsIGhhbmRsZSBGTEFHUy0+c3dpdGNoLT5jID09IC0xIGFuZCB3cml0ZQoJdGhlIGxvbmcgbmFtZSBpbnN0ZWFkLgoKCSogY29tcGF0TWFrZWZpbGUgKHN0YW1wLWNvbmZpZyk6IE5ldyB0YXJnZXQgb2Ygb2xkIGNvbmZpZy5oIHJ1bGUuCglUb3VjaCBzdGFtcC1jb25maWcgYWZ0ZXIgcnVubmluZyBjb25maWcuc3RhdHVzLgoJKGNvbmZpZy5oKTogSnVzdCBkZXBlbmQgb24gc3RhbXAtY29uZmlnLCBhbmQgaGF2ZSBlbXB0eSBjb21tYW5kcy4KCk1vbiBBcHIgIDUgMjA6MTQ6MDIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIFtIQVZFX1dBSVRQSURdOiAjdW5kZWYgSEFWRV9VTklPTl9XQUlULgoKCSogY29uZmlndXJlLmluIChBQ19IQVZFX0ZVTkNTKTogQ2hlY2sgZm9yIHBzaWduYWwuCgpGcmkgQXByICAyIDE3OjE1OjQ2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGxvbmdfb3B0aW9uX2FsaWFzZXMpOiBSZW1vdmUgIm5ldyI7IGl0IGlzIGFscmVhZHkgYW4KCXVuYW1iaWd1b3VzIHByZWZpeCBvZiAibmV3LWZpbGUiLgoKU3VuIE1hciAyOCAxNjo1NzoxNyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42My42LgoKV2VkIE1hciAyNCAxNDoyNjoxOSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IFdoZW4gYWRkaW5nIHRoZQoJbmFtZS13aXRoaW4tZGlyZWN0b3J5IGF0IHRoZSBlbmQgb2YgTkFNRSwgYW5kIHdlIGRvbid0IGFkZCBhCglzbGFzaCwgZG9uJ3QgY29weSBGSUxFTkFNRSBpbiBvbmUgY2hhciB0b28gZmFyIGludG8gTkFNRS4KCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogRmluZCBkZWZhdWx0X3NoZWxsJ3MKCWxlbmd0aCB3aXRoIHN0cmxlbiwgbm90IG51bWVyb2xvZ3kuCgpXZWQgTWFyIDE3IDIwOjAyOjI3IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBBZGQgdGhlIGVsdHMgb2YgYSBzdHJpbmcgb3B0aW9uIGluCglyZXZlcnNlIG9yZGVyLCBzbyB0aGV5IGNvbWUgb3V0IHJpZ2h0IHdoZW4gcmV2ZXJzZWQgYWdhaW4uCgpGcmkgTWFyIDEyIDE1OjM4OjQ1IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKG1ha2UuaW5mbyk6IFVzZSBgLW8gbWFrZS5pbmZvJy4KClRodSBNYXIgMTEgMTQ6MTM6MDAgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAoUkVNT1RFKTogU2V0IHRvIEBSRU1PVEVAOyBjaGFuZ2UgY29tbWVudHMgdG8KCXJlZmxlY3QgbmV3IHVzZS4KCShvYmpzKTogUmVwbGFjZSByZW1vdGUubyB3aXRoIHJlbW90ZS0kKFJFTU9URSkuby4KCShzcmNzKTogUmVwbGFjZSByZW1vdGUuYyB3aXRoIHJlbW90ZS0kKFJFTU9URSkuYy4KCShyZW1vdGUubyk6IFJ1bGUgcmVtb3ZlZC4KCgkqIGNvbmZpZ3VyZS5pbiAoUkVNT1RFKTogU3Vic3QgdGhpcyBpbiBNYWtlZmlsZSBldCBhbDsgZGVmYXVsdCAic3R1YiIuCglVc2UgQUNfV0lUSCB0byBncm9rIC0td2l0aC1jdXN0b21zIGFyZyB0byBzZXQgUkVNT1RFPWNzdG1zLgoJKiBHTlVtYWtlZmlsZSAoYnVpbGQuc2guaW4pOiBGaWx0ZXIgb3V0IHJlbW90ZS0lIGZyb20gb2JqcyBsaXN0LgoJKiBidWlsZC50ZW1wbGF0ZSAoUkVNT1RFKTogTmV3IHZhcjsgc2V0IHRvIEBSRU1PVEVALgoJKG9ianMpOiBBZGQgcmVtb3RlLSR7UkVNT1RFfS5vLgoKV2VkIE1hciAxMCAxNToxMjoyNCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42My41LgoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBGaXggImRlcGVuZGVudCItPiJkZXBlbmRlbmN5IiBpbgoJIlJlamVjdGluZyBpbXBvc3NpYmxlIiAtZCBtc2cuCgoJKiBmaWxlLmMgKGZpbGVfaGFzaF9lbnRlcik6IE5ldyBsb2NhbCB2YXJzIHtPTEQsTkVXfUJVQ0tFVC4gIFN0b3JlCgltb2QnZCB2YWx1ZXMgdGhlcmU7IG5ldmVyIG1vZCB7T0xELE5FV31IQVNILgoKTW9uIE1hciAgOCAxMzozMjo0OCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jIFtldGExMF06IEluY2x1ZGUgPGZjbnRsLmg+IGluc3RlYWQgb2YgPHN5cy9maWxlLmg+LgoKCSogY29tcGF0TWFrZWZpbGUgKFZQQVRIKTogU2V0IHRoaXMgdG8gQHNyY2RpckAuCgkoc3JjZGlyKTogU2V0IHRoaXMgdG8gJChWUEFUSCkuCgoJKiBtYWluLmMgKG1haW4pOiBOZXcgbG9jYWwgdmFyIERJUkVDVE9SWV9CRUZPUkVfQ0hESVIuICBTYXZlIGluIGl0CglhIGNvcHkgb2YgQ1VSUkVOVF9ESVJFQ1RPUlkgYWZ0ZXIgdGhlIGZpcnN0IGdldGN3ZC4gIFVzZSBpdAoJaW5zdGVhZCBvZiBDVVJSRU5UX0RJUkVDVE9SWSB3aGVuIGNoZGlyJ2luZyBiYWNrIGJlZm9yZSByZS1leGVjaW5nLgoKCSogcmVtYWtlLmMgKG5vdGljZV9maW5pc2hlZF9maWxlKTogUGFzcyBtaXNzaW5nIFNFQVJDSCBhcmcgdG8gZl9tdGltZS4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IFJlbW92ZSBleHRyYW5lb3VzIGFyZyB0byBwYXJzZV9maWxlX3NlcS4KCk1vbiBGZWIgMjIgMTQ6MTk6MzggMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlICgkKGluZm9kaXIpLyQoaW5zdG5hbWUpLmluZm8pOiBVc2UgLCBpbnN0ZWFkIG9mIC8KCWFzIHRoZSBzZWQgZGVsaW1pdGVyIGNoYXIuCgpTdW4gRmViIDIxIDE0OjExOjA0IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjMuNC4KCgkqIHJ1bGUuaCAoc3RydWN0IHJ1bGUpOiBSZW1vdmVkIGBzdWJkaXInIG1lbWJlci4KCSogcnVsZS5jIChuZXdfcGF0dGVybl9ydWxlKTogTm8gbmVlZCB0byBjbGVhciBpdC4KCShjb3VudF9pbXBsaWNpdF9ydWxlX2xpbWl0cyk6IFNldCB0aGUgYGNoYW5nZWQnIGZsYWcgaW4gZWFjaCBkZXAKCXRoYXQgcmVmZXJzIHRvIGEgbm9uZXhpc3RlbnQgZGlyZWN0b3J5LiAgTm8gbG9uZ2VyIHNldCBydWxlLWdsb2JhbAoJYHN1YmRpcicgZmxhZyB3aXRoIHRoYXQgaW5mb3JtYXRpb24uCgkocHJpbnRfcnVsZV9kYXRhX2Jhc2UpOiBEb24ndCByZWNvcmQgaW5mbyBvbiBgc3ViZGlyJyBmbGFncy4KCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogQ2hlY2sgdGhlIERFUC0+Y2hhbmdlZCBmbGFnIHJhdGhlcgoJdGhhbiB0aGUgKG5vdyBnb25lKSBSVUxFLT5zdWJkaXIgZmxhZy4gIEFsc28gdGVzdCBDSEVDS19MQVNUU0xBU0g7CglpZiBpdCBpcyBzZXQsIHRoZSBmaWxlIG1pZ2h0IGV4aXN0IGV2ZW4gdGhvdWdoIHRoZSBERVAtPmNoYW5nZWQKCWZsYWcgaXMgc2V0LgoKCSogcnVsZS5jIChjb3VudF9pbXBsaWNpdF9ydWxlX2xpbWl0cyk6IFBhc3MgIiIsIG5vdCAiLiIsIGFzIGZpbGUKCW5hbWUgYXJnIHRvIGRpcl9maWxlX2V4aXN0c19wIHRvIGNoZWNrIGZvciBleGlzdGVuY2Ugb2YgZGlyZWN0b3J5LgoKCSogaW1wbGljaXQuYyAocGF0dGVybl9zZWFyY2gpOiBJbnNpZGUgZGVwLWZpbmRpbmcgbG9vcCwgc2V0CglDSEVDS19MQVNUU0xBU0ggZnJvbSB0aGUgdmFsdWUgcmVjb3JkZWQgaW4gQ0hFQ0tFRF9MQVNUU0xBU0hbSV0sCglyYXRoZXIgdGhhbiBjb21wdXRpbmcgaXQgYW5ldy4KCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IE11c3QgYWxsb2NhIHNwYWNlIGZvciBQRVJDRU5UCglhbmQgY29weSBpdCwgdG8gYXZvaWQgbGVhdmluZyB0aGUgdHJhaWxpbmcgYCknIGluIHRoZSB2YWx1ZS4KCgkqIG1pc2MuYyAocmVtb3ZlX2NvbW1lbnRzKTogRml4ZWQgYmFja3NsYXNoLWNoZWNraW5nIGxvb3AKCWNvbmRpdGlvbiB0byBhbGxvdyBpdCB0byBsb29rIGF0IHRoZSBmaXJzdCBjaGFyIG9uIHRoZSBsaW5lLgoJUDIgPj0gTElORSwgbm90IFAyID4gTElORS4KCgkqIGNvbXBhdE1ha2VmaWxlICgkKGJpbmRpcikvJChpbnN0bmFtZSkpOiBCZWZvcmUgbW92aW5nICRALm5ldyB0bwoJJEAsIHJtICRALm9sZCBhbmQgbXYgJEAgdG8gJEAub2xkLgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBUYWtlIG5ldyBhcmdzIEZJTEVOQU1FIGFuZAoJTElORU5PLiAgRmF0YWwgaWYgdGhlIHZhcmlhYmxlIG5hbWUgaXMgZW1wdHkuCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENoYW5nZSBjYWxsZXJzLgoJKiBtYWluLmMgKG1haW4pOiBMaWtld2lzZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChncm91cCk6IERlZmluZSB0byBAS01FTV9HUk9VUEAsIGF1dG9jb25mIG1hZ2ljCgl0aGF0IGNvbmZpZ3VyZSB3aWxsIHJlcGxhY2Ugd2l0aCB0aGUgZ3JvdXAgb3duaW5nIC9kZXYva21lbS4KCk1vbiBGZWIgIDggMTQ6MjY6NDMgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiB2cGF0aC5jICh2cGF0aF9zZWFyY2gpOiBUYWtlIHNlY29uZCBhcmcgTVRJTUVfUFRSLCBwYXNzIHRocnUgdG8KCXNlbGVjdGl2ZV92cGF0aF9zZWFyY2guCgkoc2VsZWN0aXZlX3ZwYXRoX3NlYXJjaCk6IFRha2Ugc2Vjb25kIGFyZyBNVElNRV9QVFIuCglJZiB0aGUgZGlyIGNhY2hlIHRoaW5rcyBhIGZpbGUgZXhpc3RzLCBzdGF0IGl0IHRvIG1ha2Ugc3VyZSwgYW5kCglwdXQgdGhlIG1vZHRpbWUgaW4gKk1USU1FX1BUUi4KCSogcmVtYWtlLmMgKGxpYnJhcnlfc2VhcmNoKTogVGFrZSBzZWNvbmQgYXJnIE1USU1FX1BUUi4KCVdoZW4gd2UgZmluZCBhIG1hdGNoLCByZWNvcmQgaXRzIG10aW1lIHRoZXJlLgoJUGFzcyBNVElNRV9QVFIgdGhyb3VnaCB0byB2cGF0aF9zZWFyY2ggdG8gZG8gc2FtZS4KCShmX210aW1lKTogUGFzcyAmTVRJTUUgYXMgbmV3IDJuZCBhcmcgdG8ge3ZwYXRoLGxpYnJhcnl9X3NlYXJjaDsKCXN0b3JlIGl0IGluIEZJTEUtPmxhc3RfbXRpbWUgaWYgc2V0IG5vbnplcm8uCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogUGFzcyBuaWwgMm5kIGFyZyB0byB2cGF0aF9zZWFyY2guCgoJKiBjb21wYXRNYWtlZmlsZSAocmVtb3RlLm8pOiBQcmVwZW5kIGAkKHNyY2RpcikvJyB0byBgcmVtb3RlLSouYycsCglzbyBnbG9iYmluZyBsb29rcyBzb21ld2hlcmUgaXQgd2lsbCBmaW5kIHRoaW5ncy4KCgkqIGNvbXBhdE1ha2VmaWxlICgkKGluZm9kaXIpLyQoaW5zdG5hbWUpLmluZm8pOiBJbnN0YWxsIGBtYWtlLmluZm8qJwoJbm90IGAkKHNyY2RpcikvbWFrZS5pbmZvKic7IG5vIG5lZWQgdG8gdXNlIGJhc2VuYW1lLgoKRnJpIEZlYiAgNSAxMjo1Mjo0MyAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42My4zLgoKCSogY29tcGF0TWFrZWZpbGUgKGluc3RhbGwpOiBBZGQgbWlzc2luZyA7XHMuCgoJTWFrZSAtLCBALCBhbmQgKyBwcmVmaXhlcyBvbiBhIHByZS1leHBhbmRlZCBjb21tYW5kIGxpbmUgYWZmZWN0CglhbGwgbGluZXMgaW4gdGhlIGV4cGFuc2lvbiwgbm90IGp1c3QgdGhlIGZpcnN0LgoJKiBjb21tYW5kcy5oIChzdHJ1Y3QgY29tbWFuZHMpOiBSZXBsYWNlIGBsaW5lc19yZWN1cnNlJyBtZW1iZXIKCXdpdGggYGxpbmVzX2ZsYWdzJy4KCShDT01NQU5EU197UkVDVVJTRSxTSUxFTlQsTk9FUlJPUn0pOiBOZXcgbWFjcm9zLCBiaXRzIHRvIHNldCBpbgoJdGhhdCBmbGFnIGJ5dGUuCgkqIGNvbW1hbmRzLmMgKGNob3BfY29tbWFuZHMpOiBTZXQgYGxpbmVzX2ZsYWdzJyBpbnN0ZWFkIG9mCglgbGluZXNfcmVjdXJzZScuICBSZWNvcmQgbm90IG9ubHkgKyBidXQgYWxzbyBAIGFuZCAtIHByZWZpeGVzLgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBDaGVjayB0aGUgQ09NTUFORFNfUkVDVVJTRSBiaXQKCWluIEZJTEUtPmNtZHMtPmxpbmVzX2ZsYWdzLCByYXRoZXIgdGhhbiBGSUxFLT5jbWRzLT5saW5lc19yZWN1cnNlLgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBSZXBsYWNlZCBSRUNVUlNJVkUgYW5kIE5PUFJJTlQgbG9jYWwKCXZhciB3aXRoIEZMQUdTOyBpbml0aWFsaXplIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBgbGluZXNfZmxhZ3MnIGJ5dGUuCglTZXQgQ0hJTEQtPm5vZXJyb3IgaWYgdGhlIENPTU1BTkRTX05PRVJST1IgYml0IGlzIHNldCBpbiBGTEFHUy4KCVNldCB0aGUgQ09NTUFORFNfU0lMRU5UIGJpdCBpbiBGTEFHUyBmb3IgYSBAIHByZWZpeC4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IFNldCBHLT5maWxlIHRvIGl0cyBwcmV2IGFmdGVyCgljaGVja2luZyBmb3IgRyBiZWluZyBmaW5pc2hlZCwgc2luY2UgdGhhdCBjaGVjayBuZWVkcyB0byBleGFtaW5lCglHLT5maWxlLgoKCSogY29uZmlndXJlLmluICh1bmlvbiB3YWl0IGNoZWNrKSBbSEFWRV9XQUlUUElEXTogVHJ5IHVzaW5nCgl3YWl0cGlkIHdpdGggYSBgdW5pb24gd2FpdCcgU1RBVFVTIGFyZy4gIElmIHdhaXRwaWQgYW5kIHVuaW9uIHdhaXQKCWRvbid0IHdvcmsgdG9nZXRoZXIsIHdlIHNob3VsZCBub3QgdXNlIHVuaW9uIHdhaXQuCgoJKiBWZXJzaW9uIDMuNjMuMi4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IFdoZW4gRy0+ZmlsZS0+dXBkYXRlZCwgbW92ZQoJRy0+ZmlsZSB0byBpdHMgcHJldi4gIFdlIGFyZW4ndCBmaW5pc2hlZCB1bnRpbCBHLT5maWxlIGlzIG5pbC4KClRodSBGZWIgIDQgMTI6NTM6MDQgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoc3RhcnRpbmdfZGlyZWN0b3J5KTogTmV3IGdsb2JhbCB2YXJpYWJsZS4KCShtYWluKTogU2V0IGl0IHRvIGN3ZCBhZnRlciBkb2luZyAtQ3MuCgkobG9nX3dvcmtpbmdfZGlyZWN0b3J5KTogVXNlIGl0LCByYXRoZXIgdGhhbiBjb21wdXRpbmcgZWFjaCB0aW1lLgoJKiBtYWtlLmg6IERlY2xhcmUgaXQuCgoJKiBjb21wYXRNYWtlZmlsZSAoU0hFTEwpOiBEZWZpbmUgdG8gL2Jpbi9zaCBmb3IgbG9zaW5nIFVuaXggbWFrZXMuCgoJKiBtYWluLmMgKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBBbGxvY2F0ZSAoMSArIExFTiArIDEpIHdvcmRzIGZvcgoJQVJHViwgcmF0aGVyIHRoYW4gTEVOIHdvcmRzIHBsdXMgb25lIGJ5dGUuCgpXZWQgRmViICAzIDE4OjEzOjUyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKCQoYmluZGlyKS8kKGluc3RuYW1lKSk6IFB1dCAtIGJlZm9yZQoJaW5zdGFsbF9zZXRnaWQgY29tbWFuZCBsaW5lLCBzbyBpdHMgZmFpbHVyZSB3b24ndCBiZSBhbiBlcnJvci4KCShpbmZvZGlyKTogTmV3IHZhcmlhYmxlLgoJKGluc3RhbGwpOiBEZXBlbmQgb24gJChpbmZvZGlyKS8kKGluc3RuYW1lKS5pbmZvLgoJKCQoaW5mb2RpcikvJChpbnN0bmFtZSkuaW5mbyk6IE5ldyB0YXJnZXQuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBJZiBGSUxFTkFNRVMgaXMgbmlsIHdoZW4gd2Ugc2VlIGEgbGluZQoJc3RhcnRpbmcgd2l0aCBhIHRhYiwgZG9uJ3QgdHJlYXQgaXQgYXMgYSBjb21tYW5kLiAgSnVzdCBmYWxsCgl0aHJvdWdoLCByYXRoZXIgdGhhbiBnaXZpbmcgYW4gZXJyb3IuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBJZiB0aGUgTk9fVEFSR0VUUyBmbGFnIGlzIHNldCB3aGVuIHdlIHNlZSBhCgljb21tYW5kIGxpbmUsIGRvbid0IGNsZWFyIGl0IGJlZm9yZSBjb250aW51aW5nLiAgV2Ugd2FudAoJc3Vic2VxdWVudCBjb21tYW5kIGxpbmVzIHRvIGJlIGlnbm9yZWQgYXMgd2VsbC4KCgkqIGpvYi5jIChuZXdfam9iKTogQmVmb3JlIGV4cGFuZGluZyBlYWNoIGNvbW1hbmQgbGluZSwgY29sbGFwc2UKCWJhY2tzbGFzaC1uZXdsaW5lIGNvbWJpbmF0aW9ucyB0aGF0IGFyZSBpbnNpZGUgdmFyIG9yIGZuIHJlZmVyZW5jZXMuCgpNb24gRmViICAxIDE2OjAwOjEzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKGV4ZWNfcHJlZml4KTogRGVmYXVsdCB0byAkKHByZWZpeCksIG5vdCAvdXNyL2xvY2FsLgoKCSogY29tcGF0TWFrZWZpbGUgKG1ha2UuaW5mbyk6IFBhc3MgLUkkKHNyY2RpcikgdG8gbWFrZWluZm8uCgoJKiBqb2IuYyBbUE9TSVhdICh1bmJsb2NrX3NpZ3MpOiBNYWRlIGdsb2JhbC4KCVshUE9TSVhdICh1bmJsb2NrX3NpZ3MpOiBNb3ZlIGRlZm5zIHRvIGpvYi5oLgoJKiBqb2IuaCBbUE9TSVhdICh1bmJsb2NrX3NpZ3MpOiBEZWNsYXJlLgoKU3VuIEphbiAzMSAxOToxMTowNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEluIHZwYXRoIHBhcnNpbmcsIGFmdGVyIGZpbmRpbmcgdGhlCglwYXR0ZXJuIHRva2VuLCB0YWtlIGVudGlyZSByZXN0IG9mIGxpbmUgYXMgdGhlIHNlYXJjaCBwYXRoLCBub3QKCWp1c3QgdGhlIG5leHQgdG9rZW4uCgoJKiBjb21wYXRNYWtlZmlsZSAocmVtb3RlLm8pOiBEZXBlbmQgb24gcmVtb3RlLSouYy4KClRodSBKYW4gMjggMTY6NDA6MjkgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IERvbid0IGRlZmluZSBhbnkgRiBvciBEIHZlcnNpb25zLgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IERlZmluZSB0aGVtIGhlcmUgYXMKCXJlY3Vyc2l2ZWx5LWV4cGFuZGVkIHZhcmlhYmxlcyB0aGF0IHVzZSB0aGUgZGlyIGFuZCBub3RkaXIgZnVuY3MuCgoJKiB2YXJpYWJsZS5jICh0YXJnZXRfZW52aXJvbm1lbnQpOiBJbiB2X2RlZmF1bHQgY2FzZSwgZG9uJ3QgZXhwb3J0CglvX2RlZmF1bHQgb3Igb19hdXRvbWF0aWMgdmFyaWFibGVzLgoKCSogY29uZmlndXJlLmluICh1bmlvbiB3YWl0IGNoZWNrKTogUmVtb3ZlIGAgYW5kICcgaW5zaWRlIEMgY29kZTsKCXRoZXkgY29uZnVzZSB0aGUgc2hlbGwgc2NyaXB0LgoKTW9uIEphbiAyNSAxMzoxMDo0MiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYzLjEuCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IFdoZW4gc2tpcHBpbmcgZnVydGhlciBwcm9jZXNzaW5nCglvZiBhbiBlbHQgdGhhdCBpcyAiLiIsIGRvbid0IGFsc28gc2tpcCB0aGUgY29kZSB0aGF0IHB1c2hlcyBQIHBhc3QKCXRoZSBuZXh0IHNlcGFyYXRvci4KCgkqIGNvbXBhdE1ha2VmaWxlIChkaXN0Y2xlYW4pOiBEb24ndCByZW1vdmUgbWFrZS0qLgoKCSogY29uZmlndXJlLmluIChIQVZFX1VOSU9OX1dBSVQpOiBUcnkgdG8gdXNlIFdFWElUU1RBVFVTIGlmIGl0J3MKCWRlZmluZWQuICBJZiBvbmUgY2Fubm90IHVzZSBXRVhJVFNUQVRVUyB3aXRoIGEgYHVuaW9uIHdhaXQnCglhcmd1bWVudCwgd2UgZG9uJ3Qgd2FudCB0byBiZWxpZXZlIHRoZSBzeXN0ZW0gaGFzIGB1bmlvbiB3YWl0JyBhdCBhbGwuCgoJKiByZW1ha2UuYyAodXBkYXRlX2ZpbGUpOiBEbyBub3RoaW5nIHRvIHByaW50ICJ1cCB0byBkYXRlIiBtc2dzLgoJKHVwZGF0ZV9nb2FsX2NoYWluKTogRG8gaXQgaGVyZSBpbnN0ZWFkLgoJVXNlIHRoZSBgY2hhbmdlZCcgZmxhZyBvZiBlYWNoIGdvYWwncyBgc3RydWN0IGRlcCcgdG8ga2VlcCB0cmFjawoJb2Ygd2hldGhlciBmaWxlc19yZW1hZGUgKG5vdyBjb21tYW5kc19zdGFydGVkKSBjaGFuZ2VkIGFyb3VuZCBhCgljYWxsIHRvIHVwZGF0ZV9maWxlIGZvciB0aGF0IGdvYWwuCglXaGVuIGEgZ29hbCBpcyBmaW5pc2hlZCwgYW5kIGl0cyBmaWxlJ3MgdXBkYXRlX3N0YXR1cyBpcyB6ZXJvIChpLmUuLAoJc3VjY2VzcyBvciBub3RoaW5nIGRvbmUpLCB0ZXN0IHRoZSBgY2hhbmdlZCcgZmxhZyBhbmQgZ2l2ZSBhbiAidXAKCXRvIGRhdGUiIG1zZyBpZmYgaXQgaXMgY2xlYXIuCgkqIG1ha2UuaCAoZmlsZXNfcmVtYWRlKTogUmVuYW1lZCB0byBjb21tYW5kc19zdGFydGVkLgoJKiByZW1ha2UuYzogQ2hhbmdlZCBkZWZuLgoJKHVwZGF0ZV9nb2FsX2NoYWluKTogQ2hhbmdlZCB1c2VzLgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBJbmNyZW1lbnQgY29tbWFuZHNfc3RhcnRlZCBoZXJlLgoJKHJlYXBfY2hpbGRyZW4pOiBOb3QgaGVyZS4KCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IERvbid0IGRvIGFueXRoaW5nIHdpdGggZmlsZXMnCglgcHJldicgbWVtYmVycy4gIHVwZGF0ZV9maWxlIG5vdyBjb21wbGV0ZWx5IGhhbmRsZXMgdGhpcy4KCgkqIHZhcmlhYmxlLmMgKHRhcmdldF9lbnZpcm9ubWVudCk6IERvbid0IGV4cGFuZCByZWN1cnNpdmUKCXZhcmlhYmxlcyBpZiB0aGV5IGNhbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBGb3IgZmxhZ3Mgd2l0aCBvbWl0dGVkIG9wdGlvbmFsIGFyZ3MsCglzdG9yZSB7IiIsIDB9IHdpdGggQUREX0ZMQUcuICBXaGVuIGNvbnN0cnVjdGluZyBGTEFHU1RSSU5HLCBhIGZsYWcKCXNvIHN0b3JlZCBjYW5ub3QgaGF2ZSBtb3JlIGZsYWdzIGFwcGVuZGVkIHRvIHRoZSBzYW1lIHdvcmQuCgpGcmkgSmFuIDIyIDE0OjQ2OjE2IDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5jIChwcmludF92YXJpYWJsZV9zZXQpOiBJbiB2YXJzL2J1Y2tldCBjYWxjdWxhdGlvbiwKCWRvbid0IHNwdXJpb3VzbHkgbXVsdGlwbHkgYnkgMTAwLgoKCSogVmVyc2lvbiAzLjYzLgoKCSogam9iLmMgWyFIQVZFX1VOSU9OX1dBSVRdIChXVEVSTVNJRywgV0NPUkVEVU1QLCBXRVhJVFNUQVRVUyk6CglEb24ndCBkZWZpbmUgaWYgYWxyZWFkeSBkZWZpbmVkLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogRG9uJ3Qga2VlcCB0cmFjayBvZiB0aGUgY29tbWFuZF9zdGF0ZSBiZWZvcmUKCWNhbGxpbmcgdXBkYXRlX2ZpbGVfMS4gIFJlbW92ZSBsb2NhbCB2YXJpYWJsZSBDT01NQU5EU19GSU5JU0hFRCwKCWFuZCBkb24ndCB0ZXN0IGl0IHRvIGRlY2lkZSB0byBwcmludCB0aGUgImlzIHVwIHRvIGRhdGUiIG1zZy4KCVRlc3RpbmcgZm9yIGZpbGVzX3JlbWFkZSBoYXZpbmcgY2hhbmdlZCBzaG91bGQgYWx3YXlzIGJlIHN1ZmZpY2llbnQuCglUaGUgb2xkIG1ldGhvZCBsb3N0IHdoZW4gd2UgYXJlIGNhbGxlZCBpbiB0aGUgZ29hbCBjaGFpbiBydW4gb24gYQoJbWFrZWZpbGUsIGJlY2F1c2UgdGhlIG1ha2VmaWxlJ3MgY29tbWFuZF9zdGF0ZSBpcyBhbHJlYWR5CglgY3NfZmluaXNoZWQnIGZyb20gdGhlIG1ha2VmaWxlIGNoYWluIHJ1bi4KCgkqIG1pc2MuYyBbSEFWRV9TRVRSRVtHVV1JRF06IFRlc3QgdGhlc2UgdG8gZGVjbCBzZXRyZVtndV1pZC4KCgkqIGNvbmZpZ3VyZS5pbjogUmV3cm90ZSB3YWl0IGNoZWNraW5nLgoJVXNlIEFDX0hBVkVfSEVBREVSUyB0byBjaGVjayBmb3IgPHN5cy93YWl0Lmg+LgoJVXNlIEFDX0hBVkVfRlVOQ1MgdG8gY2hlY2sgZm9yIHdhaXRwaWQgYW5kIHdhaXQzLgoJVXNlIGEgY29tcGlsZSBjaGVjayB0byB0ZXN0IGp1c3QgZm9yIGB1bmlvbiB3YWl0Jy4KCSogam9iLmM6IFJld3JvdGUgY29uZGl0aW9uYWxzIGFjY29yZGluZ2x5LgoJW0hBVkVfV0FJVFBJRF06IFRlc3QgdGhpcyBvbmx5IHRvIGRlZmluZSBXQUlUX05PSEFORy4KCVtIQVZFX1dBSVQzXTogTGlrZXdpc2UuCglbSEFWRV9VTklPTl9XQUlUXTogVGVzdCB0aGlzIHRvIGRlZmluZSBXQUlUX1QgYW5kIFcqLgoKCSogY29uZmlndXJlLmluOiBTZXQgQ0ZMQUdTIGFuZCBMREZMQUdTIGJlZm9yZSBhbGwgY2hlY2tzLgoKCSogZGlyLmM6IEFkZCBzdGF0aWMgZm9yd2FyZCBkZWNscyBvZiB7b3BlbixyZWFkfV9kaXJzdHJlYW0uCgpUaHUgSmFuIDIxIDE3OjE4OjAwIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjMxLgoKCSogam9iLmMgW05HUk9VUFNfTUFYICYmIE5HUk9VUFNfTUFYPT0wXTogI3VuZGVmIE5HUk9VUFNfTUFYLgoKCSogY29tcGF0TWFrZWZpbGUgKENGTEFHUywgTERGTEFHUyk6IFNldCB0byBAQ0ZMQUdTQC9ATERGTEFHU0AuCgkqIGJ1aWxkLnRlbXBsYXRlIChDRkxBR1MsIExERkxBR1MpOiBTYW1lIGhlcmUuCgkqIGNvbmZpZ3VyZS5pbjogQUNfU1VCU1QoQ0ZMQUdTKSBhbmQgTERGTEFHUy4KCVNldCB0aGVtIHRvIC1nIGlmIG5vdCBkZWZpbmVkIGluIHRoZSBlbnZpcm9ubWVudC4KCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IFVzZSBMSUJOQU1FIGNvbnNpc3RlbnRseSwgc2V0dGluZyBpdAoJb25seSBvbmNlLCB0byBiZSB0aGUgcGFzc2VkIG5hbWUgc2FucyBgLWwnLgoJUGFzcyBuZXcgdmFyIEZJTEUgdG8gYmUgbW9kaWZpZWQgYnkgdnBhdGhfc2VhcmNoLgoKTW9uIEphbiAxOCAxNDo1Mzo1NCAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjMwLgoKCSogam9iLmMgKHN0YXJ0X3dhaXRpbmdfam9icyk6IFJldHVybiB3aGVuIGpvYl9zbG90c191c2VkIGlzIGVxdWFsIHRvCglqb2Jfc2xvdHMuCgoJKiBjb25maWd1cmUuaW46IEFkZCBBQ19DT05TVCBmb3IgdGhlIHNha2Ugb2YgZ2V0b3B0LgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQ29udGludWUgYWZ0ZXIgcGFyc2luZyBgb3ZlcnJpZGUnCglkaXJlY3RpdmUsIHJhdGhlciB0aGFuIGZhbGxpbmcgdGhyb3VnaCB0byBsb3NzYWdlLgoJQ2hlY2sgZm9yIEVPTCBvciBibGFuayBhZnRlciAib3ZlcnJpZGUgZGVmaW5lIi4KCgkqIGNvbXBhdE1ha2VmaWxlICguYy5vLCByZW1vdGUubyk6IFB1dCAkKENGTEFHUykgYWZ0ZXIgb3RoZXIgc3dpdGNoZXMuCgpGcmkgSmFuIDE1IDEyOjUyOjUyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjkuCgoJKiBtYWluLmMgKGRlZmluZV9tYWtlZmxhZ3MpOiBBZnRlciB3cml0aW5nIGV2ZXJ5dGhpbmcgaW50bwoJRkxBR1NUUklORywgb25seSBiYWNrIHVwIHR3byBjaGFycyBpZiBbLTFdIGlzIGEgZGFzaCwgbWVhbmluZyB3ZQoJanVzdCB3cm90ZSAiIC0iLiAgQWx3YXlzIHRlcm1pbmF0ZSB0aGUgc3RyaW5nIGF0ICpQLgoKCSogcmVtYWtlLmMgKGxpYnJhcnlfc2VhcmNoKTogV2hlbiBjb25zdHJ1Y3RpbmcgbmFtZXMgaW4gc3RkIGRpcnMsCgl1c2UgJigqTElCKVsyXSBmb3IgdGhlIHN0ZW0sIG5vdCBMSUJOQU1FICh3aGljaCBwb2ludHMgYXQgdGhlCglidWZmZXIgd2UgYXJlIHdyaXRpbmcgaW50byEpLgoKVGh1IEphbiAxNCAxMzo1MDowNiAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogU2V0IElOX0lHTk9SRURfREVGSU5FIGZvciAib3ZlcnJpZGUKCWRlZmluZSIgd2hlbiBJR05PUklORyBpcyB0cnVlLgoKCSogY29tcGF0TWFrZWZpbGUgKGRpc3RjbGVhbik6IFJlbW92ZSBjb25maWcuc3RhdHVzIGFuZCBidWlsZC5zaC4KCldlZCBKYW4gMTMgMTY6MDE6MTIgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yOC4KCgkqIG1pc2MuYyAoeG1hbGxvYywgeHJlYWxsb2MpOiBDYXN0IHJlc3VsdCBvZiBtYWxsb2MvcmVhbGxvYyB0bwoJKGNoYXIgKikuCgoJKiBhcnNjYW4uYyAoYXJfc2NhbikgW0FJQU1BR106IENhc3QgcmVhZCBhcmcgdG8gKGNoYXIgKikuCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IE92ZXJyaWRlIFNIRUxMIHZhbHVlIGZvcgoJb3JpZ2luIG9fZW52X292ZXJyaWRlIGFzIHdlbGwgYXMgb19lbnYuCgoJKiBHTlVtYWtlZmlsZSAoYnVpbGQuc2guaW4pOiBEb24ndCByZXBsYWNlICVnbG9ib2JqcyUuICBJbnN0ZWFkLAoJYWRkIHRoZSBuYW1lcyBvZiB0aGUgZ2xvYiBvYmplY3RzICh3L3N1YmRpcikgdG8gJW9ianMlLgoJKiBidWlsZC50ZW1wbGF0ZSAoZ2xvYm9ianMpOiBSZW1vdmVkLgoJVGFrZSBiYXNlbmFtZSBvZiAkb2JqcyBiZWZvcmUgbGlua2luZy4KClR1ZSBKYW4gMTIgMTI6MzE6MDYgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjcuCgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IEFsc28gZWRpdCBidWlsZC5zaC4KCSogYnVpbGQudGVtcGxhdGU6IE5ldyBmaWxlLgoJKiBHTlVtYWtlZmlsZSAoYnVpbGQuc2guaW4pOiBOZXcgcnVsZSB0byBjcmVhdGUgaXQgZnJvbSBidWlsZC50ZW1wbGF0ZS4KCShtYWtlLSQodmVyc2lvbikudGFyLlopOiBEZXBlbmQgb24gYnVpbGQuc2guaW4uCgoJKiBtYWluLmMgKGRpZSk6IENhbGwgcHJpbnRfZGF0YV9iYXNlIGlmIC1wLgoJKG1haW4pOiBEb24ndCBjYWxsIGl0IGhlcmUuCgoJKiBjb21wYXRNYWtlZmlsZSAoZGVmaW5lcyk6IEFkZCBAREVGU0AuICBjb25maWd1cmUgc2hvdWxkIHR1cm4gdGhpcwoJaW50byAtREhBVkVfQ09ORklHX0guCgpNb24gSmFuIDExIDE0OjM5OjIzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI2LgoKCSogbWlzYy5jIChpbml0X2FjY2Vzcyk6IFN1cnJvdW5kIHdpdGggI2lmZGVmIEdFVExPQURBVkdfUFJJVklMRUdFRC4KCSh7bWFrZSx1c2VyLGNoaWxkfV9hY2Nlc3MpIFshIEdFVExPQURBVkdfUFJJVklMRUdFRF06IE1ha2Ugbm8tb3AuCgkqIGNvbXBhdE1ha2VmaWxlIChpbnN0YWxsX3NldGdpZCk6IE5ldyB2YXIsIHNldCBieSBjb25maWd1cmUuCgkoaW5zdGFsbCk6IEluc3RhbGwgc2V0Z2lkICQoZ3JvdXApIG9ubHkgaWYgJChpbnN0YWxsX3NldGdpZCkgaXMgdHJ1ZS4KCkZyaSBKYW4gIDggMTU6MzE6NTUgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChsb2FkX3Rvb19oaWdoKTogSWYgZ2V0bG9hZGF2ZyBmYWlscyB3aXRoIGVycm5vPT0wLCBnaXZlIGEKCW1lc3NhZ2Ugc2F5aW5nIHRoYXQgbG9hZCBsaW1pdHMgYXJlIG5vdCBzdXBwb3J0ZWQuCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IFJld3JvdGUgcGF0aCBkZWxldGlvbiBjb2RlIHRvCglub3QgdHJ5IHRvIHVzZSBQQVRIJ3MgbmV4dCBsaW5rIGFmdGVyIGZyZWVpbmcgUEFUSC4KCgkqIG1haW4uYyAoZGVmaW5lX21ha2VmbGFncyk6IFJld3JpdHRlbjsgbm93IGhhbmRsZXMgc3RyaW5nLXZhbHVlZAoJb3B0aW9uLCBhbmQgaGFzIG5vIGFyYml0cmFyeSBsaW1pdHMuCgkoc3dpdGNoZXMpOiBTZXQgYHRvZW52JyBmbGFnIGZvciAtSSBhbmQgLXYuCgoJKiBtYWluLmMgKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBDYXN0IHJldHVybiB2YWx1ZSBvZiBhbGxvY2EgdG8gY2hhciAqLgoKCSogbWlzYy5jIChjaGlsZF9hY2Nlc3MpIFtIQVZFX1NFVFJFVUlELCBIQVZFX1NFVFJFR0lEXTogVXNlCglzZXRyZVtndV1pZCBpbiBwbGFjZSBvZiBzZXRbZ3VdaWQuCgpXZWQgSmFuICA2IDE1OjA2OjEyIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBEZWZpbmUgTUFLRU9WRVJSSURFUywgTUFLRSwgYW5kIE1BS0VfQ09NTUFORCB3aXRoCglvcmlnaW4gb19kZWZhdWx0LgoKCSogbWFrZS5oIFtQT1NJWF06IERvbid0IHRlc3QgdGhpcyB0byB1c2UgQU5TSV9TVFJJTkcuCglUZXN0aW5nIFNURENfSEVBREVSUyBzaG91bGQgYmUgc3VmZmljaWVudC4KCgkqIGpvYi5oOiBEZWNsYXJlIHN0YXJ0X3dhaXRpbmdfam9icy4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IEFkZCBtaXNzaW5nIHBhcmVucyBpbiBpZiBzdG10IHRoYXQgZmluZAoJY29uZGl0aW9uYWwgZGlyZWN0aXZlcy4KCgkqIG1haW4uYyAobWFpbik6IERlY2xhcmUgaW5pdF9kaXIuCgkqIGltcGxpY2l0LmMgKHBhdHRlcm5fc2VhcmNoKTogQWx3YXlzIHVzZSB0d28gJSBzcGVjcyBpbiBhCglERUJVR1AyLCBhbmQgYWx3YXlzIHBhc3MgdHdvIG5vbi1uaWwgYXJncy4KCUNhc3QgZmllbGQgd2lkdGggYXJncyB0byBpbnQuCglBZGQgbWlzc2luZyBwYXJlbnMgaW4gIVJVTEUtPnN1YmRpciBpZiBzdG10LgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb24sIHBhdHN1YnN0X2V4cGFuZCk6IEFkZCBwYXJlbnMgYXJvdW5kCglhc3NpZ25tZW50cyBpbnNpZGUgYHdoaWxlJyBzdG10cy4KCSogY29tbWFuZHMuYyAocHJpbnRfY29tbWFuZHMpOiBDYXN0IGZpZWxkIHdpZHRoIGFyZ3MgdG8gaW50LgoKCSogcmVhZC5jIChkb19kZWZpbmUpOiBDYXN0IHJldHVybiB2YWx1ZSBvZiBhbGxvY2EgdG8gKGNoYXIgKikuCgoJKiBtYWluLmMgKGluaXRfc3dpdGNoZXMpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YgZGVjb2RlX3N3aXRjaGVzLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFRha2UgbmV3IGFyZyBFTlYuICBJZiBzZXQsIGlnbm9yZSBub24tb3B0aW9uCglhcmdzOyBwcmludCBubyBlcnJvciBtc2dzOyBpZ25vcmUgb3B0aW9ucyB3aXRoIGNsZWFyIGBlbnYnIGZsYWdzLgoJKGRlY29kZV9lbnZfc3dpdGNoZXMpOiBSZXdyaXR0ZW4gdG8gY2hvcCBlbnZhciB2YWx1ZSBpbnRvIHdvcmRzCglhbmQgcGFzcyB0aGVtIHRvIGRlY29kZV9zd2l0Y2hlcy4KCShzd2l0Y2hlcyk6IFNldCBgZW52JyBmbGFnIGZvciAtSSBhbmQgLXYuCgoJKiBkaXIuYyAoaW5pdF9kaXIpOiBDYXN0IGZyZWUgdG8gX19nbG9iX2Nsb3NlZGlyX2hvb2sncyB0eXBlLgoKVHVlIEphbiAgNSAxNDo1MjoxNSAxOTkzICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjI1LgoKCSogam9iLmMgW0hBVkVfU1lTX1dBSVQgfHwgIVVTR106IERvbid0ICNpbmNsdWRlIDxzeXMvdGltZS5oPiBhbmQKCTxzeXMvcmVzb3VyY2UuaD4uICA8c3lzL3RpbWUuaD4gaW50ZXJhY3RzIGJhZGx5IHdpdGggPHRpbWUuaD4sIGFuZAoJd2UgZG9uJ3QgbmVlZCB0aGVzZSBhbnl3YXkuCgoJKiBjb25maWd1cmUuaW4gKEFDX0hBVkVfRlVOQ1MpOiBDaGVjayBmb3Igc2V0cmVbZ3VdaWQuCgkqIG1pc2MuYyAoe3VzZXIsbWFrZX1fYWNjZXNzKTogVGVzdCAjaWZuZGVmIEhBVkVfU0VUUkVbR1VdSUQsIG5vdAoJI2lmZGVmIFBPU0lYIHx8IFVTRy4gIFN1bk9TIDQuMSBpcyBzdXBwb3NlZGx5IFBPU0lYLjEgY29tcGxpYW50LAoJYnV0IGl0cyBzZXRbZ3VdaWQgZnVuY3Rpb25zIGFyZW4ndDsgaXRzIHNldHJlW2d1XWlkIGZ1bmN0aW9ucyB3b3JrLgoKCSogbWlzYy5jICh7dXNlcixtYWtlLGNoaWxkfV9hY2Nlc3MpOiBHaXZlIG5hbWUgb2YgY2FsbGVyIGluIGVycm9yIG1zZ3MuCgoJKiBqb2IuYyAobG9hZF90b29faGlnaCk6IFNheSAiY2Fubm90IGVuZm9yY2UgbG9hZCBsaW1pdCIgaW4gZXJyb3IgbXNnLgoKCSogY29uZmlndXJlLmluOiBDYWxsIEFDX1BST0dfQ0MuCgkqIGNvbXBhdE1ha2VmaWxlIChDQyk6IERlZmluZSB0byBAQ0NAIChhdXRvY29uZiBtYWdpYykuCgoJKiBjb21wYXRNYWtlZmlsZTogQWRkIC5OT0VYUE9SVCBtYWdpYyB0YXJnZXQuCgpNb24gSmFuICA0IDE3OjAwOjAzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChwcmludF92ZXJzaW9uKTogVXBkYXRlZCBjb3B5cmlnaHQgdG8gaW5jbHVkZSA5My4KClRodSBEZWMgMzEgMTI6MjY6MTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggW19BSVhdOiBEb24ndCBkZWNsYXJlIGFsbG9jYS4KClR1ZSBEZWMgMjkgMTM6NDU6MTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjQuCgoJKiBjb21wYXRNYWtlZmlsZSAob2Jqcyk6IEFkZCBzaWduYW1lLm8uCgkoc3Jjcyk6IEFkZCBzaWduYW1lLltjaF0uCgoJKiBjb21wYXRNYWtlZmlsZSAoc3Jjcyk6IEFkZCBjb25maWcuaC5pbi4KCShyZW1vdGUubyk6IEFkZCAtSS4gYmVmb3JlIC1JJChzcmNkaXIpLgoKTW9uIERlYyAyOCAxNTo1MToyNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjIzLgoKCSogcmVhZC5jIChyZWFkbGluZSk6IEZhdGFsIHdoZW4gTEVOPT0wLCBpbmRpY2F0aW5nIGEgbGluZSBzdGFydGluZwoJd2l0aCBhIE5VTC4KCShyZWFkbGluZSk6IFRha2UgbmV3IGFyZyBMSU5FTk8sIGZvciB1c2UgaW4gZXJyb3IgbXNnLgoJKHJlYWRfbWFrZWZpbGUsIGRvX2RlZmluZSk6IFBhc3MgaXQuCgoJKiBjb21wYXRNYWtlZmlsZSAoZ2xvYi9saWJnbG9iLmEpOiBQYXNzIC1ESEFWRV9DT05GSUdfSCBpbiBDUFBGTEFHUy4KCSguYy5vKTogQWRkIC1JLiBiZWZvcmUgLUkkKHNyY2RpcikuCgpXZWQgRGVjIDIzIDEyOjEyOjA0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBBY2NlcHQgYW5kIGlnbm9yZSBhIHJ1bGUgd2l0aCBubyB0YXJnZXRzLgoKCSogY29tcGF0TWFrZWZpbGUgKEFMTE9DQV9TUkMpOiBOZXcgdmFyaWFibGUuCgkoc3Jjcyk6IEluY2x1ZGUgaXRzIHZhbHVlLgoKCSogcmVhZC5jIChzdHJ1Y3QgY29uZGl0aW9uYWwpOiBSZW5hbWVkIG1lbWJlciBgbWF4X2lnbm9yaW5nJyB0bwoJYGFsbG9jYXRlZCc7IGFkZGVkIG5ldyBtZW1iZXIgYHNlZW5fZWxzZScuCgkoY29uZGl0aW9uYWxfbGluZSk6IEluaXRpYWxpemUgc2Vlbl9lbHNlIGZsYWcgd2hlbiBzdGFydGluZyBhbiBgaWYuLi4nOwoJc2V0IGl0IHdoZW4gd2Ugc2VlIGFuIGBlbHNlJzsgZmF0YWwgaWYgc2V0IHdoZW4gd2Ugc2VlIGBlbHNlJy4KCShyZWFkX21ha2VmaWxlKTogRmF0YWwgIm1pc3NpbmcgYGVuZGlmJyIgaWYgdGhlcmUgYXJlIGFueSBwZW5kaW5nCgljb25kaXRpb25hbHMsIG5vdCBqdXN0IGlmIHdlIGFyZSBzdGlsbCBpZ25vcmluZy4KClR1ZSBEZWMgMjIgMTU6MzY6MjggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChtYW5leHQpOiBTZXQgdG8gMSwgbm90IGwuCgkoJChtYW5kaXIpLyQoaW5zdG5hbWUpLiQobWFuZXh0KSk6IFVzZSAkKHNyY2RpcikgZm9yIG1ha2UubWFuIGluIGNtZHMuCgoJKiBmaWxlLmMgKGZpbGVfaGFzaF9lbnRlcik6IERvbid0IGNhbGwgdW5pcXVpemVfZGVwcyBoZXJlLgoJKiByZWFkLmMgKHJlY29yZF9maWxlcyk6IExpa2V3aXNlLgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IExpa2V3aXNlLgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBDYWxsIGl0IG9ubHkgaGVyZS4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF92YXJpYWJsZXMpIFtfX2NvbnZleF9fXTogRkM9ZmMuCgoJKiB2YXJpYWJsZS5jICh0YXJnZXRfZW52aXJvbm1lbnQpOiBFeHBhbmQgdGhlIHZhbHVlcyBvZiByZWN1cnNpdmVseQoJZXhwYW5kZWQgdmFyaWFibGVzIHdoZW4gcHV0dGluZyB0aGVtIGludG8gdGhlIGVudmlyb25tZW50LgoJKiBleHBhbmQuYyAocmVjdXJzaXZlbHlfZXhwYW5kKTogTWFkZSBnbG9iYWwuCgkqIG1ha2UuaCAocmVjdXJzaXZlbHlfZXhwYW5kKTogRGVjbGFyZSBpdC4KCgkqIHJlbWFrZS5jIChjaGVja19kZXApOiBTZXQgRklMRS0+Y29tbWFuZF9zdGF0ZSB0byBjc19kZXBzX3J1bm5pbmcKCXdoZW4gYSBkZXAncyBjb21tYW5kX3N0YXRlIGlzIGNzX3J1bm5pbmcgb3IgY3NfZGVwc19ydW5uaW5nLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogQ2hhbmdlZCBlcnJvciBtc2cgZm9yIHNwdXJpb3VzIGNtZHMgdG8KCW5vdCBzYXkgImZpcnN0IHRhcmdldCIuCgpTdW4gRGVjIDIwIDE3OjU2OjA5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbmZpZ3VyZS5pbjogRG8gQUNfQ09ORklHX0hFQURFUiByaWdodCBhZnRlciBBQ19JTklULgoJKiBtYWtlLmggKEhBVkVfQ09ORklHX0gpOiAjaW5jbHVkZSAiY29uZmlnLmgiLCB0aGVuICNkZWZpbmUgdGhpcy4KCSogY29tcGF0TWFrZWZpbGUgKGNvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZy5oLmluKTogTmV3IHJ1bGVzLgoJKGRlZmluZXMpOiBSZW1vdmVkIEBERUZTQC4KClRodSBEZWMgMTcgMTY6MTE6NDAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChyZWFsY2xlYW4pOiBKdXN0IGRlcGVuZCBvbiBkaXN0Y2xlYW47IG5vIGNtZHMuCgkoZGlzdGNsZWFuKTogRG8gd2hhdCByZWFsY2xlYW4gZGlkIGJlZm9yZTsgYWxzbyByZW1vdmUgTWFrZWZpbGUgYW5kCgljb25maWcuaDsgZG9uJ3QgcmVtb3ZlIGNvbmZpZ3VyZS4KCShpbmZvLCBkdmkpOiBOZXcgdGFyZ2V0czsgZGVwZW5kIG9uIG1ha2Uue2luZm8sZHZpfS4KCShkb2MpOiBSZW1vdmVkIHRhcmdldC4KCShNQUtFSU5GTywgVEVYSTJEVkkpOiBOZXcgdmFycy4KCShtYWtlLmluZm8sIG1ha2UuZHZpKTogVXNlIHRoZW0gaW5zdGVhZCBvZiBleHBsaWNpdCBjbWRzLgoKV2VkIERlYyAxNiAxNjoyNToyNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29uZmlndXJlLmluOiBBZGRlZCBmY250bC5oIHRvIEFDX0hBVkVfSEVBREVSUy4gIGdldGxvYWRhdmcgY2FyZXMuCgpXZWQgRGVjICA5IDE1OjIxOjAxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChsb25nX29wdGlvbl9hbGlhc2VzKTogQWRkIC0tbmV3LWZpbGUgYWxpYXMgZm9yIC1XLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcyk6IENoYW5nZSBhbGwgQysrIHRvIENYWCBhbmQgQysrRkxBR1MKCXRvIENYWEZMQUdTLgoKCSogcmVhZC5jIChkb19kZWZpbmUpOiBFeHBhbmQgdGhlIHZhcmlhYmxlIG5hbWUgYmVmb3JlIHVzaW5nIGl0LgoKCSogbWFpbi5jIChtYWluKTogRGVmaW5lIHZhcmlhYmxlICJNQUtFX0NPTU1BTkQiIHRvIGFyZ3ZbMF07CglkZWZpbmUgIk1BS0U9JChNQUtFX0NPTU1BTkQpICQoTUFLRU9WRVJSSURFUykiIGFsd2F5cy4KCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IFNlYXJjaCBmb3IgbGliTkFNRS5hIGluIGN3ZDsgbG9vayBpbgoJdnBhdGggYmVmb3JlIGxvb2tpbmcgaW4gc3RhbmRhcmQgZGlycywgbm90IGFmdGVyLgoJQ2hhbmdlZCBvcmRlciBvZiBzdGQgZGlycyB0bzogL2xpYiwgL3Vzci9saWIsICR7cHJlZml4fS9saWIuCgpNb24gTm92IDIzIDE0OjU3OjM0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfcGF0dGVybl9ydWxlcywgZGVmYXVsdF90ZXJtaW5hbF9ydWxlcyk6IEFkZGVkCglicmFja2V0cyBhcm91bmQgaW5pdGlhbGl6ZXJzLgoKCSogdmFyaWFibGUuYyAodHJ5X3ZhcmlhYmxlX2RlZmluaXRpb24pOiBEb24ndCBjaGVjayBmb3IgTElORVswXT09J1x0Jy4KCSh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IEV4cGFuZCB0aGUgbmFtZSBiZWZvcmUgZGVmaW5pbmcgdGhlIHZhci4KCgkqIGpvYi5jIChpbml0X3NpZ2xpc3QpOiBSZW1vdmVkIGZ1bmN0aW9uLgoJUmVtb3ZlZCBkZWNsIG9mIGBzeXNfc2lnbGlzdCcuCgkqIG1ha2UuaCBbISBIQVZFX1NZU19TSUdMSVNUXTogI2luY2x1ZGUgInNpZ25hbWUuaCIuCglbSEFWRV9TWVNfU0lHTElTVCAmJiAhU1lTX1NJR0xJU1RfREVDTEFSRURdOiBEZWNsYXJlIHN5c19zaWdsaXN0Cglvbmx5IHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMuCgkqIG1haW4uYyAobWFpbik6IERvbid0IGRlY2xhcmUgaW5pdF9zaWdsaXN0LgoJKG1haW4pIFshIEhBVkVfU1lTX1NJR0xJU1RdOiBDYWxsIHNpZ25hbWVfaW5pdCBpbnN0ZWFkIG9mIGluaXRfc2lnbGlzdC4KCldlZCBOb3YgMTggMTQ6NTI6NTEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKTogRG9uJ3QgdHJ5IHRvIGFwcGVuZCB0byBGSVJTVERFUFMgaWYgaXQncwoJbmlsOyBpbnN0ZWFkIGp1c3Qgc2V0IGl0IHRvIE1PUkVERVBTLgoKTW9uIE5vdiAxNiAxNzo0OToxNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogdnBhdGguYyAoY29uc3RydWN0X3ZwYXRoX2xpc3QpOiBJbml0aWFsaXplIFAgdG8gRElSUEFUSCBiZWZvcmUKCWxvb3AgdGhhdCBzZXRzIE1BWEVMRU0uCgpGcmkgTm92IDEzIDE4OjIzOjE4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjIuCgpUaHUgTm92IDEyIDE1OjQ1OjMxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoc3RhcnRfam9iX2NvbW1hbmQpOiBVbmRlciAtbiwgaW5jcmVtZW50IGZpbGVzX3JlbWFkZSBhZnRlcgoJcHJvY2Vzc2luZyAoaS5lLiwgcHJpbnRpbmcpIGFsbCBjb21tYW5kIGxpbmVzLgoKVHVlIE5vdiAxMCAxNTozMzo1MyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKTogQXBwZW5kIG5ldyBkZXBzIGlmIHRoaXMgcnVsZSBoYXMgbm8KCWNvbW1hbmRzOyBwcmVwZW5kIHRoZW0gdG8gZXhpc3RpbmcgZGVwcyBpZiB0aGlzIHJ1bGUgaGFzIG5vIGNvbW1hbmRzLgoKCSogZGlyLmMgKG9wZW5fZGlyc3RyZWFtKTogUmV0dXJuIG5pbCBpZiBESVItPmNvbnRlbnRzLT5maWxlcyBpcyBuaWwuCgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogUmVtb3ZlZCBsYXN0IGFyZyBTVFJJUC4gIEFsd2F5cyBzdHJpcCBgLi8ncy4KCShyZWFkX21ha2VmaWxlKTogQ2hhbmdlZCBjYWxsZXJzLgoJKiBmdW5jdGlvbi5jIChzdHJpbmdfZ2xvYik6IExpa2V3aXNlLgoJKiBydWxlLmMgKGluc3RhbGxfcGF0dGVybl9ydWxlKTogTGlrZXdpc2UuCgpNb24gTm92ICA5IDE3OjUwOjE2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZW1ha2UuYyAoZmlsZXNfcmVtYWRlKTogTWFkZSBnbG9iYWwuCgkobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBEb24ndCBpbmNyZW1lbnQgZmlsZXNfcmVtYWRlIGhlcmU7IHRoaXMKCWZ1bmN0aW9uIGdldHMgY2FsbGVkIGluIG1hbnkgc2l0dWF0aW9ucyB3aGVyZSBubyByZW1ha2luZyB3YXMgaW4KCWZhY3QgZG9uZS4KCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBEbyBpdCBoZXJlIGluc3RlYWQsIHdoZW4gd2Uga25vdyB0aGF0CglhY3R1YWwgY29tbWFuZHMgaGF2ZSBiZWVuIHJ1biBmb3IgdGhlIGZpbGUuCgkqIG1ha2UuaCAoZmlsZXNfcmVtYWRlKTogRGVjbGFyZSBpdC4KClRodSBOb3YgIDUgMTg6MjY6MTAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiB2cGF0aC5jIChjb25zdHJ1Y3RfdnBhdGhfbGlzdCk6IEFsbG93IGJsYW5rcyBhcyB3ZWxsIGFzIGNvbG9ucyB0bwoJc2VwYXJhdGUgZWx0cyBpbiB0aGUgc2VhcmNoIHBhdGguCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBEb24ndCBmYXRhbCBvbiBleHRyYSB0b2tlbnMgaW4gYHZwYXRoJy4KCVRoZSBzZWFyY2ggcGF0aCBjYW4gY29udGFpbiBzcGFjZXMgbm93LgoKVHVlIE5vdiAgMyAyMDo0NDozMiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChjaGVjayk6IE5ldyB0YXJnZXQ7IG5vLW9wLgoKCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBNb2QgT0xESEFTSCBieSBGSUxFX0JVQ0tFVFMgYWZ0ZXIKCXRlc3RpbmcgZm9yIE9MREhBU0g9PTAgYnV0IGJlZm9yZSB1c2luZyB0aGUgdmFsdWUuCgkocmVuYW1lX2ZpbGUpOiBEb24ndCBtb2QgT0xESEFTSCBieSBGSUxFX0JVQ0tFVFMgYmVmb3JlIHBhc3NpbmcgaXQKCXRvIGZpbGVfaGFzaF9lbnRlci4KCgkqIGZpbGUuYyAocmVuYW1lX2ZpbGUpOiBOb3RpY2Ugd2hlbiBPTERGSUxFLT5jbWRzIGNhbWUgZnJvbQoJZGVmYXVsdC5jLCBhbmQgZG9uJ3QgdHJ5IHRvIHByaW50IC0+ZmlsZW5hbWUgaW4gdGhhdCBjYXNlLgoKU3VuIE9jdCAyNSAwMTo0ODoyMyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogRG9uJ3QgcHJvY2VzcyBGLT5hbHNvX21ha2UgaGVyZS4KCShub3RpY2VfZmluaXNoZWRfZmlsZSk6IERvbid0IHByb2Nlc3MgRklMRS0+YWxzb19tYWtlIGlmIG5vIGF0dGVtcHQKCXRvIHVwZGF0ZSBGSUxFIHdhcyBhY3R1YWxseSBtYWRlLgoJRml4ZWQgdG8gY2FsbCBmX210aW1lIGRpcmVjdGx5IHRvIHJlZnJlc2ggdGhlaXIgbW9kdGltZXMuCgpTYXQgT2N0IDI0IDIyOjA4OjU5IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKGZpbmRfcGVyY2VudCk6IERvbid0IGluY3JlbWVudCBQIGFnYWluIGFmdGVyIHNraXBwaW5nCglhbiBlc2NhcGVkICUuCgoJKiBleHBhbmQuYyAodmFyaWFibGVfZXhwYW5kKTogSW4gY2FsbCB0byBwYXRzdWJzdF9leHBhbmQsIGRvbid0CglmaW5kIGAlJ3Mgb3Vyc2VsdmVzOyBsZXQgdGhhdCBmdW5jdGlvbiBkbyBpdC4KCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZTogcmVjb3JkX3dhaXRpbmdfZmlsZXMpOiBEb24ndCBjYWxsCglyZWNvcmRfZmlsZXMgaWYgRklMRU5BTUVTIGlzIG5pbC4KCShyZWFkX21ha2VmaWxlKTogQWxsIGFsdGVybmF0aXZlcyBpbiB0aGUgcGFyc2luZywgZXhjZXB0IGZvciBydWxlCglsaW5lcywgZmFsbCB0aHJvdWdoIHRvIHRoZSBlbmQgb2YgdGhlIGxvb3AuICBBdCB0aGUgZW5kIG9mIHRoZQoJbG9vcCwgZG8gcmVjb3JkX3dhaXRpbmdfZmlsZXMgc28gd2Ugbm90aWNlIGxhdGVyIHNwdXJpb3VzIGNtZHMuCgpGcmkgT2N0IDIzIDE1OjU3OjM3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IEZyZWUgb2xkIHZhbHVlIG9mIFNIRUxMCgliZWZvcmUgcmVwbGFjaW5nIGl0LgoKVGh1IE9jdCAxNSAxODo1Nzo1NiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlICguYy5vKTogQWRkIC1JJChzcmNkaXIpL2dsb2IgdG8gZmxhZ3MuCgoJKiBkaXIuYyAob3Blbl9kaXJzdHJlYW0pOiBDYXN0IHJldHVybiB2YWx1ZSB0byBfX3B0cl90LgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlczogIkdFVCIpIFtfSUJNUjJdOiBVc2UgVVNHIGRlZm4uCgoJKiBtYWtlLmggKE1BWFBBVEhMRU4pOiBNb3ZlZCBvdXQgb2YgI2lmbmRlZiBQT1NJWC4KCShHRVRfUEFUSF9NQVgpOiBNb3ZlZCBmcm9tICNpZmRlZiBQT1NJWCB0byAjaWZkZWYgUEFUSF9NQVggI2Vsc2UuCglEZWZpbmUgYXMgKGdldF9wYXRoX21heCAoKSkuCglbISBQQVRIX01BWF0gKE5FRURfR0VUX1BBVEhfTUFYKTogRGVmaW5lLgoJWyEgUEFUSF9NQVhdIChnZXRfcGF0aF9tYXgpOiBEZWNsYXJlIGZuLgoJKiBtaXNjLmMgW05FRURfR0VUX1BBVEhfTUFYXSAoZ2V0X3BhdGhfbWF4KTogTmV3IGZ1bmN0aW9uLgoKTW9uIE9jdCAxMiAxMzozNDo0NSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yMS4KCgkqIGpvYi5jIChzeXNfc2lnbGlzdCk6IE9ubHkgZGVjbGFyZSAjaWZuZGVmIFNZU19TSUdMSVNUX0RFQ0xBUkVELgoJKiBtYWtlLmggWyEgSEFWRV9TWVNfU0lHTElTVCAmJiBIQVZFX19TWVNfU0lHTElTVF06ICNkZWZpbmUKCVNZU19TSUdMSVNUX0RFQ0xBUkVELgoKCSogZGlyLmMgKGZpbGVfaW1wb3NzaWJsZSk6IFdoZW4gaW5pdGlhbGl6aW5nIERJUi0+Y29udGVudHMsIHNldAoJRElSLT5jb250ZW50cy0+ZGlyc3RyZWFtIHRvIG5pbC4KCgkqIGNvbXBhdE1ha2VmaWxlIChHTE9CKTogRGVmaW5lIG5ldyB2YXJpYWJsZS4KCShvYmpzKTogVXNlIGl0LCByYXRoZXIgdGhhbiBnbG9iL2xpYmdsb2IuYSBleHBsaWNpdGx5LgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IFdoZW4gc3RyaXBwaW5nICIuLyIsIGhhbmRsZSBjYXNlcyBsaWtlCgkiLi8vL2ZvbyIgYW5kICIuLy8vLy8iLgoJKiBmaWxlLmMgKGxvb2t1cF9maWxlLCBlbnRlcl9maWxlKTogTGlrZXdpc2UuCgpTdW4gT2N0IDExIDE3OjAwOjM1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBkaXIuYyAoc3RydWN0IGRpcnN0cmVhbSwge29wZW4scmVhZH1fZGlyc3RyZWFtKTogTmV3CglkYXRhIHR5cGUgYW5kIGZ1bmN0aW9ucyB0byByZWFkIGEgZGlyZWN0b3J5IHNlcXVlbnRpYWxseS4KCShpbml0X2Rpcik6IE5ldyBmdW5jdGlvbiB0byBob29rIGl0IGludG8gZ2xvYi4KCSogbWFpbi5jIChtYWluKTogQ2FsbCBpbml0X2Rpci4KCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzKTogQWRkZWQgZ2xvYi9saWJnbG9iLmEuCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIGNvZGUgdG8gdGVzdCBmb3IgZ2xvYi4KCkZyaSBPY3QgIDkgMTI6MDg6MzAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVjb3JkX2ZpbGVzKTogR2VuZXJhbGl6ZWQgdGVzdCBmb3IgTkFNRSBwb2ludGluZwoJc29tZXdoZXJlIGludG8gRi0+bmFtZS4KCgkqIHZhcmlhYmxlLmMgKGRlZmluZV92YXJpYWJsZV9pbl9zZXQpOiBGcmVlIG9sZCB2YWx1ZSB3aGVuIHJlcGxhY2luZy4KCgkqIHJlYWQuYyAoZG9fZGVmaW5lKTogRnJlZSB0aGUgbGluZWJ1ZmZlciBiZWZvcmUgcmV0dXJuaW5nLgoJKHJlY29yZF9maWxlcyk6IFdoZW4gY2xlYXJpbmcgLlNVRkZJWEVTIGRlcHMsIGZyZWUgdGhlaXIgZGF0YS4KCShtdWx0aV9nbG9iKTogRnJlZSBPTEQgYW5kIGl0cyBkYXRhIHdoZW4gcmVwbGFjaW5nIGl0IHdpdGggcmVzdWx0cwoJb2YgZ2xvYiBydW4uCgoJKiBjb21tYW5kcy5jIChzZXRfZmlsZV92YXJpYWJsZXMpOiBVc2UgYWxsb2NhIGluIHBsYWNlIG9mIHhtYWxsb2MKCWZvciB0ZW1wIHNwYWNlIGZvciAkXiwgJD8sIGV0IGFsLgoKCSogZGlyLmMgKHN0cnVjdCBkaXJlY3RvcnkpOiBOZXcgbWVtYmVyIGBjb250ZW50cycgcmVwbGFjZXMgYGZpbGVzJwoJYW5kIGBkaXJzdHJlYW0nLgoJKHN0cnVjdCBkaXJlY3RvcnlfY29udGVudHMpOiBOZXcgdHlwZS4KCShkaXJlY3Rvcmllc19jb250ZW50cyk6IE5ldyBoYXNoIHRhYmxlLgoJKGRpcl9zdHJ1Y3RfZmlsZV9leGlzdHNfcCk6IFRha2UgYSBzdHJ1Y3QgZGlyZWN0b3J5X2NvbnRlbnRzLgoJKGRpcl9maWxlX2V4aXN0c19wKTogUGFzcyBpdCB0aGUgYGNvbnRlbnRzJyBtZW1iZXIgb2YgdGhlIGRpciBmb3VuZC4KCShkaXJfc3RydWN0X2ZpbGVfZXhpc3RzX3ApOiBSZW5hbWVkIHRvIGRpcl9jb250ZW50c19maWxlX2V4aXN0c19wOwoJbWFkZSBzdGF0aWMuICBSZXR1cm4gMCBpZiBESVIgaXMgbmlsIChtZWFuaW5nIGl0IGNvdWxkbid0IGJlIHN0YXQnZCkuCgkoZGlyX2ZpbGVfZXhpc3RzX3AsIGZpbmRfZGlyZWN0b3J5KTogQ2hhbmdlIGFsbCBjYWxsZXJzLgoJKGZpbGVfaW1wb3NzaWJsZSk6IFVzZSBESVItPmNvbnRlbnRzLCBpbml0aWFsaXppbmcgaXQgaWYgbmlsLgoJKHByaW50X2Rpcl9kYXRhX2Jhc2UpOiBVc2UgRElSLT5jb250ZW50cywgYW5kIHByaW50IG91dCBkZXZpY2UgYW5kCglpbm9kZSBudW1iZXJzIHdpdGggZWFjaCBkaXJlY3RvcnkuCgoJKiBDaGFuZ2VzIGZvciBwZXJmb3JtYW5jZSB3aW4gZnJvbSBKb2huIEdpbG1vcmUgPGdudUBjeWdudXMuY29tPjoKCSogZGlyLmMgKERJUkVDVE9SWV9CVUNLRVRTKTogSW5jcmVhc2UgdG8gMTk5LgoJKERJUkZJTEVfQlVDS0VUUyk6IERlY3JlYXNlIHRvIDEwNy4KCShmaW5kX2RpcmVjdG9yeSk6IEFsbG9jYXRlIGFuZCB6ZXJvIGEgbXVsdGlwbGUgb2YKCXNpemVvZiAoc3RydWN0IGRpcmZpbGUgKiksIG5vdCBvZiBzaXplb2YgKHN0cnVjdCBkaXJmaWxlKS4KCShkaXJfc3RydWN0X2ZpbGVfZXhpc3RzX3ApOiBOZXcgZnVuY3Rpb24sIG5lYXJseSBhbGwgY29kZSBmcm9tCglkaXJfZmlsZV9leGlzdHNfcC4KCShkaXJfZmlsZV9leGlzdHNfcCk6IEp1c3QgY2FsbCBmaW5kX2RpcmVjdG9yeStkaXJfc3RydWN0X2ZpbGVfZXhpc3RzX3AuCgkqIHZwYXRoLmMgKHNlbGVjdGl2ZV92cGF0aF9zZWFyY2gpOiBSZW1vdmUgcmVkdW5kYW50CglkaXJfZmlsZV9leGlzdHNfcCBjYWxsLgoKCSogY29uZmlndXJlLmluOiBDb21tZW50IG91dCBnbG9iIGNoZWNrOyBhbHdheXMgdXNlIG91ciBjb2RlLgoKRnJpIE9jdCAgMiAxOTo0MToyMCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UuaCBbISBIQVZFX1NZU19TSUdMSVNUICYmIEhBVkVfX1NZU19TSUdMSVNUXTogI2RlZmluZQoJSEFWRV9TWVNfU0lHTElTVDsgYWZ0ZXIgZG9pbmcgI2RlZmluZSBzeXNfc2lnbGlzdCBfc3lzX3NpZ2xpc3QsIHdlCglkbyBoYXZlIGl0LgoKV2VkIFNlcCAzMCAxOToyMTowMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IERvbid0IGRvIC13IGF1dG9tYXRpY2FsbHkgaWYgLXMuCgpUdWUgU2VwIDI5IDIxOjA3OjU1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChwcmludGVkX3ZlcnNpb24pOiBNb3ZlIHZhcmlhYmxlIGluc2lkZSBwcmludF92ZXJzaW9uLgoJKHByaW50X3ZlcnNpb24pOiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgcHJpbnRlZF92ZXJzaW9uIGlzIHNldC4KCShkaWUpOiBEb24ndCB0ZXN0IHByaW50ZWRfdmVyc2lvbiBoZXJlLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFVuZGVyIC12LCBkbyBwcmludF92ZXJzaW9uIGJlZm9yZSBnaXZpbmcgdXNhZ2UuCgkoREVTQ1JJUFRJT05fQ09MVU1OKTogTmV3IG1hY3JvLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFVzZSBpdCB3aGVuIHByaW50aW5nIHRoZSB1c2FnZSBtZXNzYWdlLgoJTGVhdmUgYXQgbGVhc3QgdHdvIHNwYWNlcyBiZXR3ZWVuIG9wdGlvbnMgYW5kIHRoZWlyIGRlc2NyaXB0aW9ucy4KCkZyaSBTZXAgMjUgMTM6MTI6NDIgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMjAuCgpXZWQgU2VwIDE2IDE2OjE1OjIyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogU2F2ZSBlcnJubyB2YWx1ZSBmcm9tIHRyeWluZyB0byBvcGVuCglGSUxFTkFNRSwgYW5kIHJlc3RvcmUgaXQgYmVmb3JlIGVycmluZzsgb3RoZXJ3aXNlIHdlIGdldCB0aGUgZXJybm8KCXZhbHVlIGZyb20gdGhlIGxhc3QgZWx0IG9mIHRoZSBzZWFyY2ggcGF0aC4KClR1ZSBTZXAgMTUgMTU6MTI6NDcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobG9uZ19vcHRpb25fYWxpYXNlcyk6IEFkZCAtLXN0b3AgZm9yIC1TLgoKCSogcmVhZC5jICh3b3JkMWVxKTogRG8gc3RybmNtcCBiZWZvcmUgZGVyZWZlcmVuY2luZyBzb21lcGxhY2UgdGhhdAoJbWF5IGJlIG91dCBpbiBzcGFjZS4KCldlZCBTZXAgIDkgMTU6NTA6NDEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jIChub3RpY2VfZmluaXNoZWRfZmlsZSk6IElmIGFsbCB0aGUgY29tbWFuZCBsaW5lcyB3ZXJlCglyZWN1cnNpdmUsIGRvbid0IGRvIHRoZSB0b3VjaGluZy4KCgkqIGpvYi5jIChzdGFydF9qb2JfY29tbWFuZCk6IERvbid0IGNoZWNrIGZvciArIGhlcmUuCgkqIGNvbW1hbmRzLmMgKGNob3BfY29tbWFuZHMpOiBEbyBpdCBoZXJlIGluc3RlYWQuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdGVybWluYWxfcnVsZXMpOiBQcmVwZW5kICsgdG8gY21kcyBmb3IgUkNTLgoKV2VkIFNlcCAgMiAxNzo1MzowOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzKTogSW5jbHVkZSAkKEFMTE9DQSkuCgoJKiBtYWtlLmggW0NSQVldOiBNb3ZlICNkZWZpbmUgc2lnbmFsIGJzZHNpZ25hbCB0byBiZWZvcmUgI2luY2x1ZGVzLgoKVGh1IEF1ZyAyNyAxNzo0NTo0MyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogcmVhZC5jIChkZWZhdWx0X2luY2x1ZGVfZGlyZWN0b3JpZXMpOiBBZGQgSU5DTFVERURJUiBmaXJzdC4KCSogY29tcGF0TWFrZWZpbGUgKGluY2x1ZGVkaXIpOiBEZWZpbmUuCgkoZGVmaW5lcyk6IEFkZCAtRCBmb3IgSU5DTFVERURJUj0iJChpbmNsdWRlZGlyKSIuCgoJKiByZWFkLmMgKHJlYWRfbWFrZWZpbGUpOiBHcm9rIG11bHRpcGxlIGZpbGVzIGluIGBpbmNsdWRlJzsKCWdsb2JiaW5nIHRvby4KCgkqIHJlbWFrZS5jIChsaWJyYXJ5X3NlYXJjaCk6IE5ldyBmdW5jdGlvbi4KCShsaWJyYXJ5X2ZpbGVfbXRpbWUpOiBSZW1vdmUgZnVuY3Rpb24uCgkoZl9tdGltZSk6IFVzZSBsaWJyYXJ5X3NlYXJjaCBpbnN0ZWFkIG9mIGxpYnJhcnlfZmlsZV9tdGltZS4KCSogY29tcGF0TWFrZWZpbGUgKGxpYmRpcik6IERlZmluZS4KCShkZWZpbmVzKTogQWRkIC1EIGZvciBMSUJESVI9IiQobGliZGlyKSIuCgkqIG1ha2UudGV4aW5mbyAoTGlicmFyaWVzL1NlYXJjaCk6IERvY3VtZW50IGNoYW5nZS4KCgkqIGZpbGUuYyAocmVuYW1lX2ZpbGUpOiBGaXggZmlsZV9oYXNoX2VudGVyIGNhbGwgd2l0aCBtaXNzaW5nIGFyZy4KCldlZCBBdWcgMjYgMTc6MTA6NDYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTkuCgoJKiBtYWluLmMgKG1haW4pOiBTZXQgY29tbWFuZF9zdGF0ZSB0byBjc19maW5pc2hlZCBmb3IgdGVtcCBmaWxlcwoJbWFkZSBmb3Igc3RkaW4gbWFrZWZpbGVzLgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBEb24ndCB0ZWxsIGdldG9wdCB0byByZXR1cm4gbm9uLW9wdGlvbgoJYXJncyBpbiBvcmRlci4KCUlnbm9yZSBhbiBhcmd1bWVudCBvZiBgLScuCgpUaHUgQXVnIDIwIDEzOjM2OjA0IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKHN0YXJ0X2pvYl9jb21tYW5kKTogSWYgKHRvdWNoX2ZsYWcgJiYgIVJFQ1VSU0lWRSksIGlnbm9yZQoJdGhlIGNvbW1hbmQgbGluZSBhbmQgZ28gdG8gdGhlIG5leHQuCgkobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBVbmRlciAtdCwgdG91Y2ggRklMRS4KCSogcmVtYWtlLmMgKHJlbWFrZV9maWxlKTogRG9uJ3QgdG91Y2ggaXQgaGVyZS4KCldlZCBBdWcgMTkgMTY6MDY6MDkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGZ1bmN0aW9uLmMgKHBhdHRlcm5fbWF0Y2hlcyk6IFVzZSB0ZW1wb3JhcnkgZm9yIHN0cmxlbiAoV09SRCkKCWluc3RlYWQgb2YgdHdvIGZ1bmN0aW9uIGNhbGxzLgoKCSogY29tcGF0TWFrZWZpbGUgKExPQURfQVZHKTogUmVtb3ZlIHZhcmlhYmxlIGFuZCBjb21tZW50cy4KClR1ZSBBdWcgMTggMTQ6NTg6NTggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLnRleGluZm8gKFJ1bm5pbmcpOiBOb2RlIHJlbmFtZWQgdG8gYG1ha2UgSW52b2NhdGlvbicuCgpGcmkgQXVnIDE0IDEyOjI3OjEwIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBhcnNjYW4uYyAoYXJfbmFtZV9lcXVhbCk6IERvbid0IGNvbXBhcmUgW01BWC0zLi5NQVhdIGlmCglOQU1FTEVOICE9IE1FTUxFTi4KClRodSBBdWcgMTMgMTc6NTA6MDkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xOC4KCgkqIG1haW4uYzogRG9uJ3QgI2luY2x1ZGUgPHRpbWUuaD47IG1ha2UuaCBhbHJlYWR5IGRvZXMuCgpNb24gQXVnIDEwIDE3OjAzOjAxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBpbXBsaWNpdC5jIChwYXR0ZXJuX3NlYXJjaCk6IEZpeGVkIGNvcHlpbmcgb2Ygc3VmZml4IHdoZW4gYnVpbGRpbmcKCWFsc29fbWFrZSBlbHRzLgoKCSogZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uOiBgc2hlbGwnKTogTWFrZSBzdXJlIEJVRkZFUiBpcwoJbnVsbC10ZXJtaW5hdGVkIGJlZm9yZSByZXBsYWNpbmcgbmV3bGluZXMuCgoJKiBjb21wYXRNYWtlZmlsZSAobWFuZGlyKTogVXNlIG1hbiQobWFuZXh0KSwgbm90IGFsd2F5cyBtYW5sLgoKU3VuIEF1ZyAgMiAwMTo0Mjo1MCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcnVsZS5jIChuZXdfcGF0dGVybl9ydWxlKTogTm90IHN0YXRpYy4KCSogcnVsZS5oOiBEZWNsYXJlIGl0LgoKCSogZmlsZS5jIChmaWxlX2hhc2hfZW50ZXIpOiBOZXcgZnVuY3Rpb24sIG1vc3QgY29kZSBmcm9tIHJlbmFtZV9maWxlLgoJKHJlbmFtZV9maWxlKTogQ2FsbCBpdC4KCSogZmlsZS5oIChmaWxlX2hhc2hfZW50ZXIpOiBEZWNsYXJlIGl0LgoKCSogZGVwLmg6IERvYyBmaXguCgpUaHUgSnVsIDMwIDE1OjQwOjQ4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBIYW5kbGUgdXNhZ2VfYW5kX2V4aXQgd2hlbiBidWlsZGluZwoJbG9uZyBvcHRpb25zIHZlY3Rvci4KCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF90ZXJtaW5hbF9ydWxlcyk6IE1ha2UgUkNTIHJ1bGVzIHVzZSAkKENIRUNLT1VULHYpLgoJKGRlZmF1bHRfdmFyaWFibGVzKTogRGVmaW5lIENIRUNLT1VULHYgKGhhaXJ5KS4KCgkqIG1ha2UuaCBbIUhBVkVfU1lTX1NJR0xJU1QgJiYgSEFWRV9fU1lTX1NJR0xJU1RdOiAjZGVmaW5lCglzeXNfc2lnbGlzdCB0byBfc3lzX3NpZ2xpc3QuCgpTdW4gSnVsIDI2IDE2OjU2OjMyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBORVdTOiBBZGQgaGVhZGVyIGFuZCB0YWlsIGNvcHlyaWdodCBpbmZvIGxpa2UgRW1hY3MgTkVXUy4KCgkqIG1ha2UuaCBbQU5TSV9TVFJJTkddOiBEb24ndCAjZGVmaW5lIGluZGV4LCByaW5kZXgsIGJjbXAsIGJ6ZXJvLAoJYmNvcHkgaWYgYWxyZWFkeSAjZGVmaW5lJ2QuCglbU1REQ19IRUFERVJTXSAocXNvcnQsIGFib3J0LCBleGl0KTogRGVjbGFyZSBoZXJlLgoJWyEgX19HTlVfTElCUkFSWV9fICYmICFQT1NJWF06IE5vdCBoZXJlLgoKCSogbWFrZS5oIFtfQUlYXTogI3ByYWdtYSBhbGxvY2EgZmlyc3QgdGhpbmcuCgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2IpOiBTZXQgdGhlIGNvbW1hbmRfc3RhdGUgdG8gY3NfcnVubmluZwoJd2hlbiB3ZSBxdWV1ZSBhIGpvYiBvbiB3YWl0aW5nX2pvYnMuCgpGcmkgSnVsIDI0IDAyOjE2OjI4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IFVzZSAiIiBpbnN0ZWFkIG9mIG5pbAoJZm9yIGVtcHR5IHZhbHVlLgoKVGh1IEp1bCAyMyAyMjozMToxOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjE3LgoKCSogbWFpbi5jIChzdHJ1Y3QgY29tbWFuZF9zd2l0Y2gudHlwZSk6IEFkZCBhbHRlcm5hdGl2ZSB1c2FnZV9hbmRfZXhpdC4KCShjb21tYW5kX3N3aXRjaGVzKTogQWRkIC1oLy0taGVscC4KClRodSBKdWwgMTYgMTQ6Mjc6NTAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIEdOVW1ha2VmaWxlIChtYWtlLSQodmVyc2lvbikudGFyLlopOiBJbmNsdWRlIE5FV1MsIG5vdCBDSEFOR0VTLgoJKiBSRUFETUUudGVtcGxhdGU6IE1lbnRpb24gTkVXUy4KCSogQ0hBTkdFUzogUmVuYW1lZCB0byBORVdTLgoKCSogbWFpbi5jIFshIFNURENfSEVBREVSU10gW3N1bl06IERvbid0IGRlY2xhcmUgZXhpdC4KClR1ZSBKdWwgMTQgMTg6NDg6NDEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbik6IFNldCAtbyBmaWxlcycgY29tbWFuZF9zdGF0ZXMgdG8gY3NfZmluaXNoZWQuCgoJKiBydWxlLmMgKGNvdW50X2ltcGxpY2l0X3J1bGVfbGltaXRzKTogRGVjcmVtZW50IG51bV9wYXR0ZXJuX3J1bGVzCgl3aGVuIHRvc3NpbmcgYSBydWxlLgoKCSogbWFpbi5jIChtYWluKTogVXNlIGFsbG9jYSBvbmx5IGluIHNpbXBsZSBsb2NhbCB2YXIgYXNzaWdubWVudCwKCWZvciBicmFpbmRlYWQgU0dJIGNvbXBpbGVyLgoKCSogcnVsZS5jIChwcmludF9ydWxlX2RhdGFfYmFzZSk6IEJhcmYgaWYgbnVtX3BhdHRlcm5fcnVsZXMgaXMKCWluY29uc2lzdGVudCB3aXRoIHRoZSBudW1iZXIgY29tcHV0ZWQgd2hlbiBsaXN0aW5nIHRoZW0uCgpNb24gSnVsIDEzIDE3OjUxOjUzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogRm9yICQ/IGFuZCAkXiBlbHRzIHRoYXQgYXJlIGFyY2hpdmUKCW1lbWJlciByZWZzLCB1c2UgbWVtYmVyIG5hbWUgb25seS4KCkZyaSBKdWwgMTAgMDA6MDU6MDQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHZhcmlhYmxlLmggKHN0cnVjdCB2YXJpYWJsZS5leHBvcnQpOiBBZGQgbmV3IGFsdGVybmF0aXZlIHZfaWZzZXQuCgkqIHZhcmlhYmxlLmMgKHRhcmdldF9lbnZpcm9ubWVudCk6IENoZWNrIGZvciBpdC4KCShkZWZpbmVfYXV0b21hdGljX3ZhcmlhYmxlcyk6IFNldCBpdCBmb3IgTUFLRUZJTEVTLgoKVGh1IEp1bCAgOSAyMToyNDoyOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogY29tcGF0TWFrZWZpbGUgKG9ianMpOiBSZW1vdmUgZ2V0bG9hZGF2Zy5vOyAkKGV4dHJhcykgZ2V0cyBpdC4KCShyZW1vdGUubyk6IFVzZSAkKHNyY2RpcikvcmVtb3RlLmMsIG5vdCAkcmVtb3RlLmM8LgoJKGRpc3RjbGVhbiwgbW9zdGx5Y2xlYW4pOiBOZXcgdGFyZ2V0cy4KClR1ZSBKdWwgIDcgMTk6MTI6NDkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xNi4KCgkqIGNvbXBhdE1ha2VmaWxlIChjb25maWcuc3RhdHVzKTogUmVtb3ZlIHJ1bGUuCgoJKiBqb2IuYyAoc3RhcnRfd2FpdGluZ19qb2IpOiBGcmVlIEMgYWZ0ZXIgdXNpbmcgQy0+ZmlsZSwgbm90IGJlZm9yZS4KClNhdCBKdWwgIDQgMjA6NTE6NDkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbW1hbmRzLmMsIGpvYi5jLCBtYWluLmMsIG1ha2UuaCwgcmVtb3RlLWNzdG1zLmM6IFVzZSAjaWZkZWYKCUhBVkVfKiBpbnN0ZWFkIG9mICNpZm5kZWYgKl9NSVNTSU5HLgoJKiBjb25maWd1cmUuaW46IFVzZSBBQ19IQVZFX0ZVTkNTIGluc3RlYWQgb2YgQUNfTUlTU0lOR19GVU5DUyAoZ29uZSkuCgpUaHUgSnVsICAyIDE4OjQ3OjUyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBtYWtlbGV2ZWw+MCBvciAtQyBpbXBsaWVzIC13LgoKVHVlIEp1biAzMCAyMDo1MDoxNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZmlsZS5jLCBqb2IuYywgZnVuY3Rpb24uYzogRG9uJ3QgI2luY2x1ZGUgPGVycm5vLmg+LgoJbWFrZS5oOiBEbyBpdCBoZXJlIGluc3RlYWQuCgkqIGFyc2Nhbi5jIChhcl9tZW1iZXJfdG91Y2gpOiBEb24ndCBkZWNsYXJlIGVycm5vLgoKVGh1IEp1biAyNSAxNzowNjo1NSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIEdOVW1ha2VmaWxlIChtYWtlLSQodmVyc2lvbikudGFyLlopOiBEZXBlbmQgb24gSU5TVEFMTCwgY29uZmlndXJlLmluLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlKTogSWYgY29tbWFuZHMgb3IgZGVwcyBhcmUgcnVubmluZyBhZnRlcgoJdXBkYXRlX2ZpbGVfMSByZXR1cm5zLCBicmVhayBvdXQgb2YgdGhlIDo6IHJ1bGUgKC0+cHJldikgbG9vcCBhbmQKCWp1c3QgcmV0dXJuLgoKCSogam9iLmMJKGpvYl9uZXh0X2NvbW1hbmQpOiBOZXcgZnVuY3Rpb247IGNvZGUgZnJvbSBzdGFydF9qb2IuCgkoc3RhcnRfam9iX2NvbW1hbmQpOiBSZW5hbWVkIGZyb20gc3RhcnRfam9iLiAgQ2FsbCBqb2JfbmV4dF9jb21tYW5kCglhbmQgcmVjdXJzZSBmb3IgZW1wdHkgY29tbWFuZCBsaW5lcyBhbmQgLW4uCgkoc3RhcnRfd2FpdGluZ19qb2IpOiBDYWxsIHN0YXJ0X2pvYl9jb21tYW5kLCBub3Qgc3RhcnRfam9iLgoJKG5ld19qb2IpOiBDYWxsIGpvYl9uZXh0X2NvbW1hbmQgdG8gcHJpbWUgdGhlIGNoaWxkIHN0cnVjdHVyZSwgYW5kCgl0aGVuIGNhbGwgc3RhcnRfd2FpdGluZ19qb2IuCgkocmVhcF9jaGlsZHJlbik6IFVzZSBqb2JfbmV4dF9jb21tYW5kIGFuZCBzdGFydF9qb2JfY29tbWFuZC4KCShzdGFydF93YWl0aW5nX2pvYik6IENhbGwgc3RhcnRfcmVtb3RlX2pvYl9wIGhlcmUsIGFuZCBzdG9yZSBpdHMKCXJlc3VsdCBpbiBDLT5yZW1vdGUuICBJZiB6ZXJvLCBjaGVjayB0aGUgbG9hZCBhdmVyYWdlIGFuZAoJbWF5YmUgcHV0IEMgb24gd2FpdGluZ19qb2JzLgoJKHN0YXJ0X2pvYl9jb21tYW5kKTogVGVzdCBDSElMRC0+cmVtb3RlIHJhdGhlciB0aGFuIGNhbGxpbmcKCXN0YXJ0X3JlbW90ZV9qb2JfcC4gIERvbid0IGRvIGxvYWQgYXZnIGNoZWNraW5nIGF0IGFsbCBoZXJlLgoKCSogbWFpbi5jIChtYWluKTogRG9uJ3QgaGFuZGxlIFNJR0lMTCwgU0lHSU9ULCBTSUdFTVQsIFNJR0JVUywKCVNJR1NFR1YsIFNJR0ZQRSBvciBTSUdUUkFQLgoKCSogY29tcGF0TWFrZWZpbGUgKGdsb2IvbGliZ2xvYi5hKTogRG9uJ3QgcGFzcyBzcmNkaXIgdG8gc3ViLW1ha2UuCgljb25maWd1cmUgd2lsbCBzZXQgaXQgaW4gZ2xvYi9NYWtlZmlsZS4KCldlZCBKdW4gMjQgMTk6NDA6MzQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGRpci5jIFtESVJFTlRdIChkaXJlY3QpOiBEb24ndCBkZWZpbmUgdG8gZGlyZW50LgoJWyEgRElSRU5UXSAoZGlyZWN0KTogRGVmaW5lIHRvIGRpcmVudC4KCShkaXJfZmlsZV9leGlzdHNfcCk6IFVzZSBzdHJ1Y3QgZGlyZW50IGluc3RlYWQgb2Ygc3RydWN0IGRpcmVjdC4KCgkqIG1ha2UuaCAoZ2V0Y3dkKTogTm8gc3BhY2UgYmV0d2VlbiBtYWNybyBhbmQgKCBmb3IgYXJncyEKCgkqIGpvYi5jIChzdGFydF9qb2IpOiBEb24ndCBwdXQgdGhlIGpvYiBvbiB3YWl0aW5nX2pvYnMgaWYKCWpvYl9zbG90c191c2VkPT0wLgoKCSogbWFrZS50ZXhpbmZvIChNaXNzaW5nKTogU2hvcnRlbmVkIHRpdGxlLgoKVHVlIEp1biAyMyAxODo0MjoyMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogZmlsZS5jIChyZW1vdmVfaW50ZXJtZWRpYXRlcyk6IFByaW50ICJybSIgY29tbWFuZHMgdW5kZXIgLW4uCgpNb24gSnVuIDIyIDE2OjIwOjAyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjE1LgoKRnJpIEp1biAxOSAxNjoyMDoyNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogYXJzY2FuLmMgW01fVU5JWF06ICN1bmRlZiBNX1hFTklYLgoKV2VkIEp1biAxNyAxNzo1OToyOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGRlZmF1bHQuYyAoZGVmYXVsdF90ZXJtaW5hbF9ydWxlcyk6IFB1dCBAIHByZWZpeCBvbiBSQ1MgY21kcy4KClR1ZSBKdW4gMTYgMTk6MjQ6MTcgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChnZXRsb2FkYXZnLm8pOiBSZW1vdmVkIHNwZWNpYWwgcnVsZS4KCShDRkxBR1MpOiBEb24ndCBpbmNsdWRlICQoZGVmaW5lcykuCgkoLmMubyk6IERlZmluZSBzdWZmaXggcnVsZS4KCShnbG9iL2xpYmdsb2IuYSk6IFBhc3MgQ1BQRkxBR1M9JChkZWZpbmVzKSB0byBzdWJtYWtlLgoJKEdFVE9QVF9TUkMsIHNyY3MsIHRhZ3NyY3MpOiBQcmVmaXggZmlsZXMgd2l0aCAkKHNyY2RpcikvLgoKCSogYXJzY2FuLmMgKGFyX25hbWVfZXF1YWwpOiBNb3ZlZCBsb2NhbCB2YXJzIGluc2lkZSAjaWYnZCBibG9jay4KCgkqIG1ha2UuaCAobWF4KTogUmVtb3ZlZC4KCSogZXhwYW5kLmMgKHZhcmlhYmxlX2J1ZmZlcl9vdXRwdXQpOiBEb24ndCB1c2UgaXQuCgoJKiBjb21wYXRNYWtlZmlsZSAoSU5TVEFMTCk6IERlZmluZS4KCShNYWtlZmlsZSk6IE5ldyBydWxlIHRvIG1ha2UgZnJvbSBNYWtlZmlsZS5pbi4KCShzcmNkaXIpOiBEZWZpbmUuCgkoVlBBVEgpOiBEZWZpbmUuCgkoZ2V0bG9hZGF2Zy5vLCByZW1vdGUubyk6IFVzZSBhdXRvY29uZiAkZm9vPCBoYWNrLgoKCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKTogUmVtb3ZlZCByZXR1cm4uCgpNb24gSnVuIDE1IDE3OjQyOjUxIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTQuCgoJKiBtYWtlLnRleGluZm8gKFN1bW1hcnkpOiBOZXcgbm9kZS4KCShTcGVjaWFsIFRhcmdldHMpOiBNZW50aW9uIC5FWFBPUlRfQUxMX1ZBUklBQkxFUyBoZXJlLgoKCSogdmFyaWFibGUuYyAobWF4KTogTW92ZWQgdG8gbWFrZS5oLgoKCSogY29tcGF0TWFrZWZpbGUgKG9ianMsIHNyY3MpOiBBZGRlZCBhciAmIGFyc2Nhbi4KCgkqIGpvYi5jIChzdGFydF93YWl0aW5nX2pvYik6IE5ldyBmdW5jdGlvbiwgMm5kIGhhbGYgb2YgbmV3X2pvYi4KCShuZXdfam9iKTogQ2FsbCBpdC4KCShzdGFydF93YWl0aW5nX2pvYnMpOiBOZXcgZnVuY3Rpb24uCgkqIHJlbWFrZS5jICh1cGRhdGVfZ29hbF9jaGFpbik6IENhbGwgc3RhcnRfd2FpdGluZ19qb2JzIGF0IHRoZSB0b3AKCW9mIHRoZSBtYWluIGxvb3AuCgkqIGNvbXBhdE1ha2VmaWxlIChvYmpzLCBzcmNzKTogUmVtb3ZlZCBsb2FkLCBhZGRlZCBnZXRsb2FkYXZnLgoKRnJpIEp1biAxMiAxOTozMzoxNiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChsb2FkX3Rvb19oaWdoKTogTmV3IGZ1bmN0aW9uLiAgVXNlcyBnZXRsb2FkYXZnLgoJKHdhaXRpbmdfam9icyk6IE5ldyB2YXJpYWJsZS4KCShzdGFydF9qb2IpOiBEb24ndCBjYWxsIHdhaXRfdG9fc3RhcnRfam9iLiAgSW5zdGVhZCwgaWYKCWxvYWRfdG9vX2hpZ2ggcmV0dXJucyBub256ZXJvLCBhZGQgdGhlIGNoaWxkIHRvIHRoZQoJYHdhaXRpbmdfam9icycgY2hhaW4gYW5kIHJldHVybiB3aXRob3V0IHN0YXJ0aW5nIHRoZSBqb2IuCgpUaHUgSnVuIDExIDAwOjA1OjI4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogZXhwYW5kLmMgKHZhcmlhYmxlX2J1ZmZlcl9vdXRwdXQpOiBNYWRlIGdsb2JhbCBhZ2Fpbi4KCSogdmFyaWFibGUuaDogQW5kIGRlY2xhcmUgaXQuCgoJKiBhcnNjYW4uYyAoUE9SVEFSKTogRGVmaW5lIGZvciBhbGwgc3lzdGVtcyBpZiBQT1JUNUFSIGlzIG5vdCBkZWZpbmVkLgoJKEFSX05BTUVMRU4sIEFSX1RSQUlMSU5HX1NMQVNIKTogUmVtb3ZlZC4KCShhcl9zY2FuKTogRG9uJ3QgdXNlIGl0LiAgRG9uJ3QgI2lmZGVmIEFSX1RSQUlMSU5HX1NMQVNIOyBqdXN0IGxvb2sKCWZvciBhIHNsYXNoIGluIHRoZSBhcmNoaXZlIGF0IHJ1biB0aW1lLgoJKGFyX25hbWVfZXF1YWwpOiBSZXdyb3RlIC5vIGhhY2tpbmcgdG8gbm90IHVzZSBBUl9OQU1FTEVOLCBhbmQgdG8KCWNvcGUgd2l0aCB0cmFpbGluZy1zbGFzaCBhbmQgbm9uLXRyYWlsaW5nLXNsYXNoIGFyY2hpdmVzLgoKCSogbWFpbi5jIChtYWluKSBbISBTRVRWQlVGX1JFVkVSU0VEXTogVGVzdCB0aGlzIGluc3RlYWQgb2YgVVNHcjMgZXQgYWwuCglbU0VUVkJVRl9SRVZFUlNFRF06IEFsd2F5cyBhbGxvY2F0ZSBhIGJ1ZmZlciBvdXJzZWx2ZXMuCgoJKiBsb2FkLmMgKGxvYWRfYXZlcmFnZSkgW3NnaV06IFVzZSBzeXNtcCBjYWxsLgoKCSogY29tcGF0TWFrZWZpbGUgKElOU1RBTExfREFUQSwgSU5TVEFMTF9QUk9HUkFNKTogRGVmaW5lLgoJKCQoYmluZGlyKS8kKGluc3RuYW1lKSwgJChtYW5kaXIpL21ha2UuJChtYW5leHQpKTogVXNlIHRoZW0uCgoJKiBtYWtlLmggW0hBVkVfVkZPUktfSF06ICNpbmNsdWRlIDx2Zm9yay5oPi4KCSh2Zm9yaywgVkZPUktfTkFNRSk6IERvbid0IGRlZmluZS4KCSogam9iLmMgKHN0YXJ0X2pvYik6IFVzZSAidmZvcmsiIGluIHBsYWNlIG9mIFZGT1JLX05BTUUuCgoJKiBtYWtlLmggW0hBVkVfTElNSVRTX0gsIEhBVkVfU1lTX1BBUkFNX0hdOiBJZiAjZGVmaW5lJ2QsICNpbmNsdWRlCgl0aGUgZWFjaCBmaWxlLiAgUmVhcnJhbmdlZCBQQVRIX01BWCBoYWNraW5nLgoJKiBqb2IuYzogUmVhcnJhbmdlZCBOR1JPVVBTX01BWCBoYWNraW5nLgoKCSogcmVtYWtlLmMgKGZzdGF0LCB0aW1lKTogRG9uJ3QgZGVjbGFyZS4KCgkqIGNvbXBhdE1ha2VmaWxlIChkZWZpbmVzKTogVmFsdWUgaXMgQERFRlNALgoJKExPQURMSUJFUyk6IFZhbHVlIGlzIEBMSUJTQC4KCShleHRyYXMpOiBWYWx1ZSBpcyBATElCT0JKU0AuCgkoQVJDSElWRVMsIEFSQ0hJVkVTX1NSQywgQUxMT0NBU1JDKTogUmVtb3ZlZC4KCSogYXJzY2FuLmMsIGFyLmM6IFN1cnJvdW5kIGJvZHkgd2l0aCAjaWZuZGVmIE5PX0FSQ0hJVkVTLgoKCSogbWlzYy5jIFshIEhBVkVfVU5JU1REX0hdOiBUZXN0IGluc3RlYWQgb2YgIVBPU0lYIHRvIGRlY2wgZ2V0KmlkLgoKCSogbWFrZS5oIFtHRVRDV0RfTUlTU0lOR106IFRlc3QgaW5zdGVhZCBvZiAhVVNHICYmICFQT1NJWCBldCBhbC4KCShnZXRjd2QpOiBKdXN0IGRlY2xhcmUgaWYgcHJlc2VudC4gIElmIG5vdCwgZGVjbGFyZSBhcyBhIG1hY3JvCgl1c2luZyBnZXR3ZCwgYW5kIGRlY2xhcmUgZ2V0d2QuCglbUEFUSF9NQVhdIChHRVRfUEFUSF9NQVgpOiAjZGVmaW5lIHRvIFBBVEhfTUFYLgoJKiBtYWluLmMgKG1haW4sCWxvZ193b3JraW5nX2RpcmVjdG9yeSk6IFVzZSBnZXRjd2QgaW5zdGVhZCBvZiBnZXR3ZC4KCgkqIG1haW4uYyAobWFpbikgW1NFVExJTkVCVUZfTUlTU0lOR106IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIFVTRy4KCgkqIG1ha2UuaCAoU0lHSEFORExFUiwgU0lHTkFMKTogUmVtb3ZlZC4KCShSRVRTSUdUWVBFKTogRGVmaW5lIGlmIG5vdCAjZGVmaW5lJ2QuCgkqIG1haW4uYyAobWFpbik6IFVzZSBzaWduYWwgaW4gcGxhY2Ugb2YgU0lHTkFMLgoKCSogbWFpbi5jIFtTWVNfU0lHTElTVF9NSVNTSU5HXTogVGVzdCBpbnN0ZWFkIG9mIFVTRy4KCgkqIGpvYi5jIChzZWFyY2hfcGF0aCkgW0dFVEdST1VQU19NSVNTSU5HXTogVGVzdCBpbnN0ZWFkIG9mIFVTRy4KCVtIQVZFX1VOSVNURF9IXTogVGVzdCBpbnN0ZWFkIG9mIFBPU0lYIHRvIG5vdCBkZWNsIGdldGdyb3Vwcy4KCgkqIG1haW4uYyBbISBIQVZFX1VOSVNURF9IXTogVGVzdCBpbnN0ZWFkIG9mICFQT1NJWCB0byBkZWNsIGNoZGlyLgoJWyEgU1REQ19IRUFERVJTXTogVGVzdCBpbnN0ZWFkIG9mICFQT1NJWCB0byBkZWNsIGV4aXQgJiBhdG9mLgoKCSogam9iLmMgKGNoaWxkX2hhbmRsZXIpLCBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpOiBSZXR1cm4KCVJFVFNJR1RZUEUgaW5zdGVhZCBvZiBpbnQuCgkqIG1haW4uYyAobWFpbik6IERlY2xhcmUgZmF0YWxfZXJyb3Jfc2lnbmFsIGFuZCBjaGlsZF9oYW5kbGVyIGhlcmUKCXRvIHJldHVybiBSRVRTSUdUWVBFOyByZW1vdmVkIHRvcC1sZXZlbCBkZWNsIG9mIGZvcm1lci4KCgkqIGNvbW1hbmRzLmMgKGZhdGFsX2Vycm9yX3NpZ25hbCksIGpvYi5jICh1bmJsb2NrX3NpZ3MsIHN0YXJ0X2pvYiksCgltYWluLmMgW1NJR1NFVE1BU0tfTUlTU0lOR106IFRlc3QgdGhpcyBpbnN0ZWFkIG9mIFVTRy4KCldlZCBKdW4gMTAgMjI6MDY6MTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyBbSEFWRV9XQUlUUElEXTogVGVzdCB0aGlzIGluc3RlYWQgb2YgVVNHLgoJWyEgSEFWRV9VTklTVERfSF06IFRlc3QgdGhpcyBpbnN0ZWFkIG9mICFQT1NJWCB0byBkZWNsYXJlIG1pc2MgZm5zLgoJKEdJRF9UKTogRG9uJ3QgI2RlZmluZS4KCShzZWFyY2hfcGF0aCk6IFVzZSBnaWRfdCBpbnN0ZWFkIG9mIEdJRF9ULgoJW0dFVERUQUJMRVNJWkVfTUlTU0lORywgU1lTX1NJR0xJU1RfTUlTU0lORywgRFVQMl9NSVNTSU5HXTogVGVzdAoJdGhlc2UgaW5kaXZpZHVhbGx5IGluc3RlYWQgb2YgVVNHIGZvciBhbGwuCgkqIG1ha2UuaCAoY3RpbWUpOiBEb24ndCBkZWNsYXJlLiAgI2luY2x1ZGUgdGltZS5oIGluc3RlYWQuCglbSEFWRV9VTklTVERfSF06ICNpbmNsdWRlIDx1bmlzdGQuaD4gYW5kICNkZWZpbmUgUE9TSVggI2lmZGVmCglfUE9TSVhfVkVSU0lPTi4KCSogZGlyLmMgW19fR05VX0xJQlJBUllfX10gKERfTkFNTEVOKTogRGVmaW5lIHRvIHVzZSBkX25hbWxlbiBtZW1iZXIuCgkqIG1ha2UuaCBbTkVFRF9NRU1PUllfSF06IE9ubHkgaW5jbHVkZSBtZW1vcnkuaCAjaWZkZWYgdGhpcy4KCgkqIGFyc2Nhbi5jOiBSZW1vdmVkICNpZmRlZiBtZXNzIGFib3V0IHN0cmluZy5oIGV0IGFsLgoJSnVzdCAjaW5jbHVkZSBtYWtlLmggaW5zdGVhZC4KCSogbWFrZS5oIChmc3RhdCwgYXRvbCk6IERlY2xhcmUuCgoJKiBjb21tYW5kcy5jIChmYXRhbF9lcnJvcl9zaWduYWwpOiBEb24ndCB1c2Ugc2lnbWFzayB0byBjaGVjayBmb3IKCXByb3BhZ2F0ZWQgc2lnbmFsczsgdXNlIHx8cyBpbnN0ZWFkLgoJKFBST1BBR0FURURfU0lHTkFMX01BU0spOiBSZW1vdmVkLgoJKGZhdGFsX2Vycm9yX3NpZ25hbCkgW1BPU0lYXTogVXNlIHNpZ3Byb2NtYXNrIGluIHBsYWNlIG9mIHNpZ3NldG1hc2suCgoJKiB2YXJpYWJsZS5jICh2YXJpYWJsZV9idWZmZXIsIHZhcmlhYmxlX2J1ZmZlcl9sZW5ndGgsCglpbml0aWFsaXplX3ZhcmlhYmxlX291dHB1dCwgdmFyaWFibGVfb3V0cHV0KTogTW92ZWQgdG8gZXhwYW5kLmM7CgltYWRlIGFsbCBzdGF0aWMuCgkoc3RydWN0IG91dHB1dF9zdGF0ZSwgc2F2ZV92YXJpYWJsZV9vdXRwdXQsCglyZXN0b3JlX3ZhcmlhYmxlX291dHB1dCk6IFJlbW92ZWQuCgkqIGV4cGFuZC5jIChpbml0aWFsaXplX3ZhcmlhYmxlX291dHB1dCk6IFB1dCBhIE5VTCBhdCB0aGUgYmVnaW5uaW5nCglvZiB0aGUgbmV3IGJ1ZmZlciBhZnRlciBhbGxvY2F0aW5nIGl0LgoJKGFsbG9jYXRlZF92YXJpYWJsZV9leHBhbmRfZm9yX2ZpbGUpOiBEb24ndCB1c2UKCXtzYXZlLHJlc3RvcmV9X3ZhcmlhYmxlX291dHB1dC4gIERvIGl0IGJ5IGhhbmQgaW5zdGVhZCwga2VlcGluZwoJc3RhdGUgb24gdGhlIHN0YWNrIGluc3RlYWQgb2YgbWFsbG9jJ2luZyBpdC4KCShhbGxvY2F0ZWRfdmFyaWFibGVfZXhwYW5kKTogUmVtb3ZlZC4KCSogdmFyaWFibGUuaCAoYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZCk6IERlZmluZSBoZXJlIGFzIG1hY3JvLgoJKHZhcmlhYmxlX2J1ZmZlcl9vdXRwdXQsIGluaXRpYWxpemVfdmFyaWFibGVfb3V0cHV0LAoJc2F2ZV92YXJpYWJsZV9vdXRwdXQsIHJlc3RvcmVfdmFyaWFibGVfb3V0cHV0KTogUmVtb3ZlZCBkZWNscy4KCgkqIHJlYWQuYyAoY29uZGl0aW9uYWxfbGluZSk6IEZvciBhbiBpZiBjbWQsIGlmIGFueSBlbHQgb2YgdGhlCgljb25kaXRpb25hbHMgc3RhY2sgaXMgaWdub3JpbmcsIGp1c3QgcHVzaCBhIG5ldyBsZXZlbCB0aGF0IGlnbm9yZXMKCWFuZCByZXR1cm4gMTsgZG9uJ3QgZXZhbHVhdGUgdGhlIGNvbmRpdGlvbi4KClRodSBKdW4gIDQgMjE6MDE6MjAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBtYWluLmMgKG1haW4pOiBQdXQgI2lmZGVmJ3MgYXJvdW5kIGZyb2JiaW5nIFNJR1NZUyBhbmQgU0lHQlVTLgoKCSogam9iLmMgKGdldGR0YWJsZXNpemUpOiBEb24ndCBkZWNsYXJlIG9yICNkZWZpbmUgaWYgYWxyZWFkeSAjZGVmaW5lJ2QuCgpXZWQgSnVuICAzIDIzOjQyOjM2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogZmlsZS5jIChzbmFwX2RlcHMpOiBJZiBgLkVYUE9SVF9BTExfVkFSSUFCTEVTJyBpcyBhIHRhcmdldCwgc2V0CglleHBvcnRfYWxsX3ZhcmlhYmxlcy4KCSogbWFrZS50ZXhpbmZvIChWYXJpYWJsZXMvUmVjdXJzaW9uKTogRG9jdW1lbnQgLkVYUE9SVF9BTExfVkFSSUFCTEVTLgoKVHVlIEp1biAgMiAyMTowODozNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xMy4KCgkqIGNvbW1hbmRzLmMgKHNldF9maWxlX3ZhcmlhYmxlcyk6IENhbGN1bGF0ZSBsZW5ndGggZm9yIF5EIGFuZCA/RAoJaW5kaXZpZHVhbGx5LCBtYWtpbmcgc3VyZSB0byBnaXZlIHRoZW0gYXQgbGVhc3QgZW5vdWdoIHNwYWNlIGZvciAiLi8iLgoKCSogbWFrZS5oIFtDUkFZXTogI2RlZmluZSBzaWduYWwgdG8gYnNkc2lnbmFsLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW0NSQVldOiBEZWZpbmUgUEMsIFNFR0xEUiwKCUNGNzdQUEZMQUdTLCBDRjc3UFAsIENGVCwgQ0YsIGFuZCBGQy4KCgkqIGFyc2Nhbi5jIChBUl9IRFJfU0laRSk6IERlZmluZSB0byBzaXplb2YgKHN0cnVjdCBhcl9oZHIpLCBpZiBpdAoJd2Fzbid0IGRlZmluZWQgYnkgPGFyLmg+LgoKVGh1IE1heSAyOCAwMDo1Njo1MyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4xMi4KClR1ZSBNYXkgMjYgMDE6MjY6MzAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBydWxlLmMgKG5ld19wYXR0ZXJuX3J1bGUpOiBJbml0aWFsaXplIExBU1RSVUxFIHRvIG5pbCwgbm90CglwYXR0ZXJuX3J1bGVzLgoKTW9uIE1heSAyNSAxOTowMjoxNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogSW5pdGlhbGl6ZSBhbGwgdGhlIGxvbmdfb3B0aW9uIGVsdCBtZW1iZXJzLgoKVGh1IE1heSAyMSAxNjozNDoyNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEB3b29rdW16LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS50ZXhpbmZvIChUZXh0IEZ1bmN0aW9ucyk6IENvcnJlY3QgZmlsdGVyLW91dCBkZXNjcmlwdGlvbi4KClR1ZSBNYXkgMTkgMjA6NTA6MDEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBjb21wYXRNYWtlZmlsZSAocmVhbGNsZWFuKTogRG9uJ3QgcmVtb3ZlIGJhY2t1cCBmaWxlcy4KCgkqIG1haW4uYyAoZGVjb2RlX3N3aXRjaGVzKTogQWxsb2NhdGUgQVJHQysxIGVsdHMgaW4gYG90aGVyX2FyZ3MnLgoKU3VuIE1heSAxNyAxNjozODo0OCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMTEuCgpUaHUgTWF5IDE0IDE2OjQyOjMzIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIGpvYi5jIChyZWFwX2NoaWxkcmVuKTogRG9uJ3QgZGllIGlmIHdhaXQgcmV0dXJucyBFSU5UUi4KCldlZCBNYXkgMTMgMTg6Mjg6MjUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IEFsd2F5cyBydW4gdGhlIG5leHQgY29tbWFuZCBmb3IgYQoJc3VjY2Vzc2Z1bCB0YXJnZXQuICBJZiB3ZSBhcmUgZ29pbmcgdG8gZGllLCB3ZSBkb24ndCB3YW50IHRvIGxlYXZlCgl0aGUgdGFyZ2V0IHBhcnRpYWxseSBtYWRlLgoKVHVlIE1heSAxMiAwMDozOToxOSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IEFmdGVyIGxvb3AsIGlmIHdlIG9ubHkKCWhhdmUgb25lIHdvcmQsIGNoZWNrIGl0IGZvciBiZWluZyBhIHNoZWxsIGNvbW1hbmQuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IEFsbG9jYXRlIEFSR0Mgc2xvdHMgaW4gb3RoZXJfYXJncyB0bwoJYmVnaW4gd2l0aCwgc28gd2UgbmV2ZXIgbmVlZCB0byB3b3JyeSBhYm91dCBncm93aW5nIGl0LgoJSWYgd2UgZ2V0IGEgbm9uLW9wdGlvbiBhcmcgYW5kIFBPU0lYTFlfQ09SUkVDVCBpcyBpbiB0aGUKCWVudmlyb25tZW50LCBicmVhayBvdXQgb2YgdGhlIGxvb3AuICBBZnRlciB0aGUgbG9vcCwgYWRkIGFsbCByZW1haW5pbmcKCWFyZ3MgdG8gb3RoZXJfYXJncyBsaXN0LgoKCSogbWFpbi5jIChkZWNvZGVfc3dpdGNoZXMpOiBGb3IgcG9zaXRpdmVfaW50IGFuZCBmbG9hdGluZyBzd2l0Y2hlcwoJd2hlbiBvcHRhcmcgaXMgbmlsLCB1c2UgbmV4dCBhcmcgaWYgaXQgbG9va3MgcmlnaHQgKHN0YXJ0IHdpdGggYQoJZGlnaXQsIG9yIG1heWJlIGRlY2ltYWwgcG9pbnQgZm9yIGZsb2F0aW5nKS4KCgkqIHZhcmlhYmxlLmMgKGRlZmluZV9hdXRvbWF0aWNfdmFyaWFibGVzKTogQWx3YXlzIHNldCBTSEVMTCB0bwoJZGVmYXVsdCBpZiBpdCBjb21lcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFNldCBpdHMgZXhwb3J0IGJpdC4KCSogbWFrZS50ZXhpbmZvIChFbnZpcm9ubWVudCk6IERvY3VtZW50IGNoYW5nZS4KCk1vbiBNYXkgMTEgMDA6MzI6NDYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjEwLgoKCSogY29tcGF0TWFrZWZpbGUgKHRhZ3MsIFRBR1MpOiBVc2UgdmFycyBmb3IgY21kcy4KCShFVEFHUywgQ1RBR1MpOiBEZWZpbmUuCgoJKiBtYWluLmMgKGRlY29kZV9zd2l0Y2hlcyk6IElmIGEgc3dpdGNoZXMgZWx0IGhhcyBhIG5pbCBsb25nX25hbWUsCgltYWtlIHRoZSBsb25nIG9wdGlvbiBuYW1lIGVsdCBiZSAiIi4KCUZpeGVkIGxvb3AgdG8gbm90IGlnbm9yZSBhbGwgdGhlIG9wdGlvbnMuCgoJKiBtYWtlLnRleGluZm8gKE9wdGlvbiBTdW1tYXJ5KTogQWRkZWQgbG9uZyBvcHRpb25zLgoKCSogbWFpbi5jIChzd2l0Y2hlcyk6IENoYW5nZWQgLW0ncyBkZXNjcmlwdGlvbiB0byAiLWIiLgoJKGRlY29kZV9zd2l0Y2hlcyk6IFdoZW4gcHJpbnRpbmcgdGhlIHVzYWdlIG1lc3NhZ2UsIGRvbid0IHByaW50Cglzd2l0Y2hlcyB3aG9zZSBkZXNjcmlwdGlvbnMgc3RhcnQgd2l0aCAtLgoJV2hlbiBjb25zdHJ1Y3RpbmcgdGhlIGxpc3Qgb2YgbmFtZXMgZm9yIHN3aXRjaCAtQywgc2VhcmNoIHRoZQoJc3dpdGNoZXMgdmVjdG9yIGZvciBzd2l0Y2hlcyB3aG9zZSBkZXNjcmlwdGlvbnMgYXJlICItQyIuCgoJKiBtYWluLmMgKHN3aXRjaGVzKTogQ2FsbCAtUyAtLW5vLWtlZXAtZ29pbmcsIG5vdCAtLWRvbnQta2VlcC1nb2luZy4KCUNhbGwgLUkgLS1pbmNsdWRlLWRpciwgbm90IC0taW5jbHVkZS1wYXRoLgoJKGxvbmdfb3B0aW9uX2FsaWFzZXMpOiBBZGRlZCAtLW5ldyA9PSAtVywgLS1hc3N1bWUtbmV3ID09IC1XLAoJLS1hc3N1bWUtb2xkID09IC1vLCAtLW1heC1sb2FkID09IC1sLCAtLWRyeS1ydW4gPT0gLW4sIC0tcmVjb24gPT0gLW4sCgktLW1ha2VmaWxlID09IC1mLgoKCSogbWFpbi5jIChzd2l0Y2hlcyk6IFJlbW92ZWQgYm9ndXMgInNpbGVudCIgZWx0LgoJKGxvbmdfb3B0aW9uX2FsaWFzZXMpOiBEZWZpbmUgbmV3IHZhci4KCShkZWNvZGVfc3dpdGNoZXMpOiBBZGQgbG9uZ19vcHRpb25fYWxpYXNlcyBvbnRvIHRoZSBlbmQgb2YgdGhlIGxvbmcKCW9wdGlvbnMgdmVjdG9yIGNyZWF0ZWQgZm9yIGdldG9wdF9sb25nLgoJTG9vayB0aHJvdWdoIGxvbmdfb3B0aW9uX2FsaWFzZXMgZm9yIGV4dHJhIG5hbWVzIHRvIGxpc3QKCWluIHVzYWdlIG1lc3NhZ2UuCgpTYXQgTWF5ICA5IDAwOjIxOjA1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChsb2dfd29ya2luZ19kaXJlY3RvcnkpOiBGaXhlZCB0byBwcm9wZXJseSBub3QgcHJpbnQgdGhlCglsZWF2aW5nIG1lc3NhZ2Ugd2hlbiB3ZSBoYXZlbid0IHByaW50ZWQgdGhlIGVudGVyaW5nIG1lc3NhZ2UuCgpGcmkgTWF5ICA4IDIxOjU1OjM1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChzdHJ1Y3QgY29tbWFuZF9zd2l0Y2gpOiBBZGRlZCBlbHRzIGBsb25nX25hbWUnLAoJYGRlc2NyaXB0aW9uJywgYW5kIGBhcmdkZXNjJy4KCShzd2l0Y2hlcyk6IEFkZGVkIGluaXRpYWxpemVycyBmb3IgbmV3IG1lbWJlcnMuCgkoZGVjb2RlX3N3aXRjaGVzKTogUmV3cml0dGVuIHRvIHVzZSBnZXRvcHRfbG9uZy4KCSogY29tcGF0TWFrZWZpbGUgKEdFVE9QVCwgR0VUT1BUX1NSQyk6IERlZmluZS4KCShvYmpzLCBzcmNzKTogSW5jbHVkZSB0aGVtLgoKCSogam9iLmMgKGNoaWxkX2RpZWQpOiBSZW5hbWVkIHRvIGRlYWRfY2hpbGRyZW47IG1hZGUgc3RhdGljLgoJKGNoaWxkX2hhbmRsZXIpOiBJbmNyZW1lbnQgZGVhZF9jaGlsZHJlbiBpbnN0ZWFkIG9mIHNldHRpbmcgY2hpbGRfZGllZC4KCShyZWFwX2NoaWxkcmVuKTogRGVjcmVtZW50IGRlYWRfY2hpbGRyZW4gaW5zdGVhZCBvZiBjbGVhcmluZwoJY2hpbGRfZGllZC4gIFRoZSBwb2ludCBvZiBhbGwgdGhpcyBpcyB0byBhdm9pZCBwcmludGluZyAid2FpdGluZwoJZm9yIHVuZmluaXNoZWQgam9icyIgd2hlbiB3ZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGJsb2NrLgoJVGhpcyBoYXBwZW5lZCB3aGVuIG11bHRpcGxlIFNJR0NITERzIGJlZm9yZSByZWFwX2NoaWxkcmVuIHdhcyBjYWxsZWQuCgoJKiBqb2IuYyAocmVhcF9jaGlsZHJlbik6IElmIEVSUiBpcyBzZXQsIHNvIHdlIGRvbid0IGNhbGwgc3RhcnRfam9iCglvbiB0aGUgY2hpbGQgYmVpbmcgcmVhcGVkLCBpbnN0ZWFkIHNldCBpdHMgY29tbWFuZF9zdGF0ZSB0bwoJY3NfZmluaXNoZWQuCgkocmVhcF9jaGlsZHJlbiwgY2hpbGRfaGFuZGxlciwgbmV3X2pvYik6IEkgYWRkZWQgc2V2ZXJhbAoJZGVidWdnaW5nIHByaW50ZidzIHdoaWxlIGZpeGluZyB0aGlzLiAgSSBsZWZ0IHRoZW0gaW4gaWYgKGRlYnVnX2ZsYWcpCgliZWNhdXNlIHRoZXkgbWF5IGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoaXMgc3R1ZmYgYWdhaW4uCgpXZWQgTWF5ICA2IDIyOjAyOjM3IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IHZfZXhwb3J0IGlzIG5vdCAxLgoKTW9uIE1heSAgNCAxNzoyNzozNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjkuCgoJKiB2YXJpYWJsZS5jIChleHBvcnRfYWxsX3ZhcmlhYmxlcyk6IE5ldyB2YXJpYWJsZS4KCSh0YXJnZXRfZW52aXJvbm1lbnQpOiBFeHBvcnQgdmFyaWFibGVzIHdob3NlIGBleHBvcnQnIG1lbWJlciBpcwoJdl9kZWZhdWx0IGlmIGV4cG9ydF9hbGxfdmFyaWFibGVzIGlzIHNldCBhbmQgdGhlaXIgbmFtZXMgYXJlIGJlbmlnbi4KCSogdmFyaWFibGUuaDogRGVjbGFyZSBleHBvcnRfYWxsX3ZhcmlhYmxlcy4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogSWYgZXhwb3J0IG9yIHVuZXhwb3J0IGlzIGdpdmVuIHdpdGggbm8KCWFyZ3MsIHNldCBvciBjbGVhciBleHBvcnRfYWxsX3ZhcmlhYmxlcywgcmVzcGVjdGl2ZWx5LgoKCSogdmFyaWFibGUuYyAodGFyZ2V0X2Vudmlyb25tZW50KTogRXhjbHVkZSBNQUtFTEVWRUwgaW4gdGhlIGxvb3AsCglzbyBpdCBpc24ndCBkdXBsaWNhdGVkIHdoZW4gd2UgYWRkIGl0IGF0IHRoZSBlbmQuCgpTdW4gTWF5ICAzIDE3OjQ0OjQ4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjguCgoJKiB2YXJpYWJsZS5oIChzdHJ1Y3QgdmFyaWFibGUpOiBBZGRlZCBuZXcgbWVtYmVyIGBleHBvcnQnLgoJKiB2YXJpYWJsZS5jIChkZWZpbmVfdmFyaWFibGVfaW5fc2V0KTogSW5pdGlhbGl6ZSBpdCB0byB2X2RlZmF1bHQuCgkodGFyZ2V0X2Vudmlyb25tZW50KTogRG9uJ3QgY2hlY2sgZm9yIC5OT0VYUE9SVC4KCUV4cG9ydCB2YXJpYWJsZXMgd2hvc2UgYGV4cG9ydCcgbWVtYmVyIGlzIHZfZGVmYXVsdCBhbmQgdGhhdCB3b3VsZAoJaGF2ZSBiZWVuIGV4cG9ydGVkIHVuZGVyIC5OT0VYUE9SVCwgYW5kIHZhcmlhYmxlcyB3aG9zZSBgZXhwb3J0JwoJbWVtYmVyIGlzIHZfZXhwb3J0LgoJKHRyeV92YXJpYWJsZV9kZWZpbml0aW9uKTogUmV0dXJuIHRoZSB2YXJpYWJsZSBkZWZpbmVkLgoJKiB2YXJpYWJsZS5oICh0cnlfdmFyaWFibGVfZGVmaW5pdGlvbik6IENoYW5nZWQgZGVjbC4KCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogUmVjb2duaXplIGBleHBvcnQnIGFuZCBgdW5leHBvcnQnIGRpcmVjdGl2ZXMuCgpGcmkgTWF5ICAxIDExOjM5OjM4IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIG1haW4uYyAobWFpbikgW1BPU0lYXTogUmV2ZXJzZWQgYXJncyB0byBzaWdhZGRzZXQuCgpUaHUgQXByIDMwIDE3OjMzOjMyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgW1BPU0lYIHx8ICFVU0ddICh1bmJsb2NrX3NpZ3MpOiBOZXcgZm4uCgkoc3RhcnRfam9iKTogQmxvY2sgc2lnbmFscyBiZWZvcmUgZm9ya2luZy4KCShuZXdfam9iKTogVW5ibG9jayBzaWduYWxzIGFmdGVyIHB1dHRpbmcgdGhlIG5ldyBjaGlsZCBvbiB0aGUgY2hhaW4uCgkqIG1haW4uYyAobWFpbikgW1BPU0lYXTogVXNlIHNpZ3NldF90IGZhdGFsX3NpZ25hbF9zZXQgaW5zdGVhZCBvZgoJaW50IGZhdGFsX3NpZ25hbF9tYXNrLgoKCSogbG9hZC5jIFtzZ2ldIChMREFWX0NWVCk6IERlZmluZS4KCldlZCBBcHIgMjkgMTc6MTU6NTkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjcuCgoJKiBsb2FkLmMgKGxvYWRfYXZlcmFnZSkgW3NnaV06IENsZWFyIHRoZSBoaWdoIGJpdCBvZiB0aGUgYWRkcmVzcwoJZnJvbSB0aGUgc3ltYm9sIHRhYmxlIGJlZm9yZSBsb29raW5nIGl0IHVwIGluIGttZW0uCgoJKiBtaXNjLmMgKGZhdGFsLCBtYWtlZmlsZV9mYXRhbCk6IFB1dCAqKiogaW4gZmF0YWwgZXJyb3IgbWVzc2FnZXMuCgkocmVtYWtlX2ZpbGUpOiBObyBsb25nZXIgbmVlZGVkIGluIG1lc3NhZ2UgaGVyZS4KCgkqIG1haW4uYyAoZGllKTogQ2FsbCByZWFwX2NoaWxkcmVuIHdpdGggQkxPQ0s9PTEuCgpUdWUgQXByIDI4IDIwOjQ0OjM1IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGFsYmVydC5nbnUuYWkubWl0LmVkdSkKCgkqIHJ1bGUuYyAoZnJlZXJ1bGUpOiBEb24ndCBzZXQgTEFTVFJVTEUtPm5leHQgaWYgTEFTVFJVTEUgaXMgbmlsLgoKU3VuIEFwciAyNiAxNTowOTo1MSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBydWxlLmMgKGNvdW50X2ltcGxpY2l0X3J1bGVfbGltaXRzKTogSW5pdGlhbGl6ZSBMQVNUUlVMRSB0byBuaWwsCglub3QgdG8gaGVhZCBvZiBjaGFpbi4gIEV4dHJhY3QgbmV4dCBwdHIgYmVmb3JlIHdlIG1pZ2h0IGRvCglmcmVlcnVsZSwgYW5kIHVzZSB0aGF0IGZvciBuZXh0IGl0ZXJhdGlvbi4KCShmcmVlcnVsZSk6IFN0aWxsIGRvIG5leHQgcHRyIGZyb2JiaW5nIGlmIExBU1RSVUxFIGlzIG5pbC4KClR1ZSBBcHIgMjEgMDM6MTY6MjkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAZ2VlY2guZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY2hpbGRfZXJyb3IpOiBSZW1vdmVkIGV4dHJhICVzIGZyb20gZXJyb3IgbXNnIGZvcm1hdC4KCgkqIFZlcnNpb24gMy42Mi42LgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBEb24ndCBzdGFydCBsYXRlciBjb21tYW5kcyBpbiBhIHNlcXVlbmNlCglpZiBFUlIgaXMgbm9uemVyby4KCgkqIGpvYi5jIChuZXdfam9iKTogQWx3YXlzIGNhbGwgcmVhcF9jaGlsZHJlbiB3aXRoIEJMT0NLPT0wIGZpcnN0IHRoaW5nLgoKCSogam9iLmMgKHJlYXBfY2hpbGRyZW4pOiBOZXcgZnVuY3Rpb247IHdvcmsgdGhhdCB1c2VkIHRvIGJlIGRvbmUgaW4KCWNoaWxkX2hhbmRsZXIuCgkoY2hpbGRfZGllZCk6IE5ldyBnbG9iYWwgdmFyLgoJKGNoaWxkX2hhbmRsZXIpOiBOb3cganVzdCBzZXRzIGNoaWxkX2RpZWQuCgkod2FpdF9mb3JfY2hpbGRyZW4pOiBSZW1vdmVkLgoJKHVua25vd25fY2hpbGRyZW5fcG9zc2libGUsIGJsb2NrX3NpZ25hbHMsIHVuYmxvY2tfc2lnbmFscywKCXB1c2hfc2lnbmFsc19ibG9ja2VkX3AsIHBvcF9zaWduYWxzX2Jsb2NrZWRfcCk6IFJlbW92ZWQuCgkoY2hpbGRfZXhlY3V0ZV9qb2IpOiBSZW1vdmVkIGNhbGwgdG8gdW5ibG9ja19zaWduYWxzLgoJKG5ld19qb2IpOiBSZW1vdmVkIGNhbGxzIHRvIHB1c2hfc2lnbmFsc19ibG9ja2VkX3AgYW5kCglwb3Bfc2lnbmFsc19ibG9ja2VkX3AuCgkqIGpvYi5oOiBEZWNsYXJlIHJlYXBfY2hpbGRyZW4sIG5vdCB3YWl0X2Zvcl9jaGlsZHJlbi4KCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKSwgam9iLmMgKG5ld19qb2IpLAoJbG9hZC5jIFtMREFWX0JBU0VEXSAod2FpdF90b19zdGFydF9qb2IpLCBtYWluLmMgKGRpZSksCglyZW1ha2UuYyAodXBkYXRlX2dvYWxfY2hhaW4pLCBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb246IGBzaGVsbCcpOgoJQ2hhbmdlZCB3YWl0X2Zvcl9jaGlsZHJlbiBjYWxscyB0byByZWFwX2NoaWxkcmVuLgoJU29tZSBuZWVkZWQgdG8gYmUgbG9vcHMgdG8gd2FpdCBmb3IgYWxsIGNoaWxkcmVuIHRvIGRpZS4KCSogY29tbWFuZHMuYyAoZmF0YWxfZXJyb3Jfc2lnbmFsKSwgbWFpbi5jIChtYWluLAoJbG9nX3dvcmtpbmdfZGlyZWN0b3J5KSwgZnVuY3Rpb24uYyAoZXhwYW5kX2Z1bmN0aW9uKTogUmVtb3ZlZCBjYWxscwoJdG8gcHVzaF9zaWduYWxzX2Jsb2NrZWRfcCBhbmQgcG9wX3NpZ25hbHNfYmxvY2tlZF9wLgoJKiBqb2IuaDogUmVtb3ZlZCBkZWNscy4KCgkqIGpvYi5oOiBBZGRlZCBjb3B5cmlnaHQgbm90aWNlLgoKV2VkIEFwciAxNSAwMjowMjo0MCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNoaWxkX2Vycm9yKTogTm8gKioqIGZvciBpZ25vcmVkIGVycm9yLgoKVHVlIEFwciAxNCAxODozMToyMSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogaW1wbGljaXQuYyAoREVCVUdQMik6IFVzZSBkbyAuLi4gd2hpbGUgKDApIGluc3RlYWQgb2YgaWYgLi4uIGVsc2UgdG8KCWF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogcmVhZC5jIChwYXJzZV9maWxlX3NlcSk6IERvbid0IHJlbW92ZSAuLyB3aGVuIGl0IGlzIGZvbGxvd2VkIGJ5IGEKCWJsYW5rLgoKTW9uIEFwciAxMyAyMTo1NjoxNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIChERUJVR1BSKTogVXNlIGRvIC4uLiB3aGlsZSAoMCkgaW5zdGVhZCBvZiBpZiAuLi4gZWxzZSB0bwoJYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCgoJKiByZW1ha2UuYyAobm90aWNlX2ZpbmlzaGVkX2ZpbGUpOiBSdW4gZmlsZV9tdGltZSBvbiB0aGUgYWxzb19tYWtlCglmaWxlcywgc28gdnBhdGhfc2VhcmNoIGNhbiBoYXBwZW4uCgoJKiBHTlVtYWtlZmlsZSAodGVzdHMpOiBVc2UgcGVybCB0ZXN0IHN1aXRlIGZyb20gY3NhQHN3LnN0cmF0dXMuY29tLgoJKGFscGhhLWZpbGVzKTogSW5jbHVkZSB0ZXN0IHN1aXRlIHRhciBmaWxlLgoKRnJpIEFwciAgMyAwMDo1MDoxMyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi41LgoKV2VkIEFwciAgMSAwNTozMToxOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlLCB1cGRhdGVfZmlsZV8xKTogRG8gY2hlY2tfcmVuYW1lZCBvbiBlbHRzCglvZiBkZXAgY2hhaW5zIHdoZW4gdHJhdmVyc2luZyB0aGVtLiAgU29tZXRoaW5nIHVucmVsYXRlZCBtaWdodCBoYXZlCglyZW5hbWVkIG9uZSBvZiB0aGUgZmlsZXMgdGhlIGRlcCBjaGFpbiBwb2ludHMgdG8uCgoJKiBmaWxlLmMgKHJlbmFtZV9maWxlKTogSWYgRklMRSBoYXMgYmVlbiByZW5hbWVkLCBmb2xsb3cgaXRzCglgcmVuYW1lZCcgcHRyLCBzbyB3ZSBnZXQgdG8gdGhlIGZpbmFsIHJlYWwgRklMRS4gIFVzaW5nIHRoZSByZW5hbWVkCglvbmVzIGxvc2VzIGJlY2F1c2UgdGhleSBhcmUgbm90IGluIHRoZSBoYXNoIHRhYmxlLCBzbyB0aGUgcmVtb3ZhbAoJY29kZSBsb29wcyBpbmZpbml0ZWx5LgoKCSogcmVhZC5jIChyZWFkX2FsbF9tYWtlZmlsZXMpOiBDbG9iYmVyIG51bGwgdGVybWluYXRvciBpbnRvCglNQUtFRklMRVMgZXhwYW5zaW9uLCBzbyBzdHJpbmcgcGFzc2VkIHRvIHJlYWRfbWFrZWZpbGUgaXMgcHJvcGVybHkKCXRlcm1pbmF0ZWQuCgpNb24gTWFyIDMwIDIwOjE4OjAyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGdlZWNoLmdudS5haS5taXQuZWR1KQoKCSogY29tbWFuZHMuYyAoc2V0X2ZpbGVfdmFyaWFibGVzKTogJCogZm9yIGFyY2hpdmUgbWVtYmVyIHdpdGgKCWV4cGxpY2l0IGNtZHMgaXMgc3RlbSBvZiBtZW1iZXIsIG5vdCBvZiB3aG9sZSBgbGliKG1lbWJlciknLgoKVGh1IE1hciAyNiAxNToyNDozOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuNC4KClR1ZSBNYXIgMjQgMDU6MjA6NTEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJ1bGUuYyAobmV3X3BhdHRlcm5fcnVsZSk6IFJ1bGVzIGFyZSBpZGVudGljYWwgb25seSBpZiBhbGwgdGhlaXIKCXRhcmdldHMgbWF0Y2ggKHJlZ2FyZGxlc3Mgb2Ygb3JkZXIpLgoKV2VkIE1hciAxMSAxMzo0OTo1NCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBnZWVjaC5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbWFrZS5jIChyZW1ha2VfZmlsZSk6IENoYW5nZWQgZXJyb3IgIm5vIHdheSB0byBtYWtlIiB0byAibm8KCXJ1bGUgdG8gbWFrZSIuICBGaWF0IEh1Z2guCgoJKiBtYWtlLnRleGluZm8gKExhc3QgUmVzb3J0KTogRGVzY3JpYmUgJTo6IHJ1bGVzIGFuZCBuZXcgLkRFRkFVTFQKCWJlaGF2aW9yLgoKCSogcmVtYWtlLmMgKHVwZGF0ZV9maWxlXzEpOiBPbmx5IHVzZSAuREVGQVVMVCBjbWRzIGlmIEZJTEUgaXMgbm90IGEKCXRhcmdldC4KClR1ZSBNYXIgMTAgMTg6MTM6MTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIHJlbW90ZS1zdHViLmMsIHJlbW90ZS1jc3Rtcy5jIChzdGFydF9yZW1vdGVfam9iKTogVGFrZSBuZXcgYXJnLAoJZW52aXJvbm1lbnQgdG8gcGFzcyB0byBjaGlsZC4KCSogam9iLmMgKHN0YXJ0X2pvYik6IFBhc3MgaXQuCgpNb24gTWFyICA5IDE5OjAwOjExIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBmaWxlLmMgKGVudGVyX2ZpbGUpOiBBbHNvIHN0cmlwIC4vcyBoZXJlLCB0byBnZXQgY29tbWFuZC1saW5lCgl0YXJnZXQgbmFtZXMuCgoJKiByZW1vdGUtY3N0bXMuYzogQWRkIGNvbW1lbnQgdGVsbGluZyBwZW9wbGUgdG8gbGVhdmUgbWUgYWxvbmUuCgoJKiBjb21wYXRNYWtlZmlsZSAobWFucGFnZSBpbnN0YWxsKTogUmVtb3ZlIHRhcmdldCBiZWZvcmUgY29weWluZy4KClR1ZSBNYXIgIDMgMTg6NDM6MjEgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UudGV4aW5mbyAoTWlzc2luZyk6IFJlbmFtZWQgdG8gIkluY29tcGF0aWJpbGl0aWVzIGFuZCAuLi4iLgoJQWRkZWQgcGFyYWdyYXBoIGRlc2NyaWJpbmcgJD8gaW5jb21wYXRpYmlsaXR5IHdpdGggVW5peCBhbmQgUE9TSVguMi4KClN1biBNYXIgIDEgMTU6NTA6NTQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAbnV0cmltYXQuZ251LmFpLm1pdC5lZHUpCgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb246IGBzaGVsbCcpOiBEb24ndCBkZWNsYXJlIGZvcmsgb3IgcGlwZS4KCVVzZSB2Zm9yayBpbnN0ZWFkIG9mIGZvcmsuCgpUdWUgRmViIDI1IDIyOjA1OjMyIDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLnRleGluZm8gKENoYWluZWQgUnVsZXMpOiBDbGFyaWZ5IC5QUkVDSU9VUyB0byBzYXZlCglpbnRlcm1lZGlhdGUgZmlsZXMuCgoJKiBsb2FkLmMgW3N1bl0gKExEQVZfQ1ZUKTogRGVmaW5lIHRvIGRpdmlkZSBieSBGU0NBTEUuCgpTdW4gRmViIDE2IDAyOjA1OjE2IDE5OTIgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBWZXJzaW9uIDMuNjIuMy4KClNhdCBGZWIgMTUgMTc6MTI6MjAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlIChtYWtlaW5mbyk6IFVzZSBlbWFjcyBiYXRjaC10ZXhpbmZvLWZvcm1hdCBmbi4KCkZyaSBGZWIgMTQgMDA6MTE6NTUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENvcnJlY3RseSBoYW5kbGUgZGVmaW5lICYgZW5kZWYgaW4gaWZkZWZzLgoKCSogcmVhZC5jIChyZWNvcmRfZmlsZXMpOiBQYXNzIGFyZyBmb3IgJXMgaW4gZXJyb3IgbXNnLgoKCSogbWFpbi5jIChtYWluKSBbX19JQk1SMiwgUE9TSVhdOiBVc2UgY29ycmVjdCAoYSBsYSBVU0dyMykgc2V0dmJ1ZgoJY2FsbC4KCldlZCBGZWIgMTIgMTI6MDc6MzkgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAd29va3Vtei5nbnUuYWkubWl0LmVkdSkKCgkqIG1ha2UudGV4aW5mbyAoTGlicmFyaWVzL1NlYXJjaCk6IFNheSBpdCBkb2VzIC91c3IvbG9jYWwvbGliIHRvby4KClN1biBGZWIgIDkgMjM6MDY6MjQgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIHJlYWQuYyAocmVhZF9tYWtlZmlsZSk6IENoZWNrIGZvciBleHRyYW5lb3VzIGBlbmRlZicgd2hlbiBpZ25vcmluZy4KClRodSBGZWIgIDYgMTY6MTU6NDggMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIFZlcnNpb24gMy42Mi4yLgoKVHVlIEZlYiAgNCAyMDowNDo0NiAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBDb3JyZWN0bHkgaWdub3JlCgl3aGl0ZXNwYWNlIGFmdGVyIGJhY2tzbGFzaC1OTC4KCkZyaSBKYW4gMzEgMTg6MzA6MDUgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCgkqIGNvbXBhdE1ha2VmaWxlOiBJZ25vcmUgZXJyb3JzIGZyb20gY2hncnAgYW5kIGNobW9kIHdoZW4gaW5zdGFsbGluZy4KCldlZCBKYW4gMjkgMTg6MTM6MzAgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIChtYWluKTogV2hlbiBzZXR0aW5nIE1BS0VMRVZFTCBpbiB0aGUgZW52IHRvIHJlLWV4ZWMsCglhbGxvY2F0ZSBzcGFjZSBzbyBhcyBub3QgdG8gY2xvYmJlciBwYXN0IHRoZSBlbmQgb2YgdGhlIG9sZCBzdHJpbmcuCgoJKiBtYWtlLmggW0hBVkVfQUxMT0NBX0hdOiBJbmNsdWRlIDxhbGxvY2EuaD4KCSogY29tcGF0TWFrZWZpbGUgKGRlZmluZXMpOiBEb2N1bWVudCBIQVZFX0FMTE9DQV9ILgoKTW9uIEphbiAyMCAxMzo0MDowNSAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBtYWtlLmggW1ZGT1JLX01JU1NJTkddOiBVc2UgZm9yayBpbnN0ZWFkLgoJKiBjb21wYXRNYWtlZmlsZSAoZGVmaW5lcyk6IERvY3VtZW50IHNhbWUuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IERvbid0IGNyZWF0ZSBhbiBlbXB0eQoJYXJnIGlmIGJhY2tzbGFzaC1OTCBpcyBhdCBiZWdpbm5pbmcgb2Ygd29yZC4KClN1biBKYW4gMTkgMTY6MjY6NTMgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogbWFpbi5jIFtER1VYXTogQ2FsbCBzZXR2YnVmIGFzIGZvciBVU0dyMy4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogTm90aWNlIGNvcnJlY3RseSB0aGF0CgliYWNrc2xhc2gtTkwgaXMgdGhlIGVuZCBvZiB0aGUgYXJnIChiZWNhdXNlIGl0IGlzIHJlcGxhY2VkIHdpdGggYQoJc3BhY2UpLgoKVGh1IEphbiAxNiAxODo0MjozOCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IElmIFNIRUxMIGlzIG5pbCwgc2V0IGl0Cgl0byBkZWZhdWx0X3NoZWxsIGJlZm9yZSBwcm9jZWVkaW5nLgoKCSogbWFrZS5oIFtzZ2ldOiBObyBhbGxvY2EuaCwgYWZ0ZXIgYWxsLgoKV2VkIEphbiAxNSAxMjozMDowNCAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiByZWFkLmMgKG11bHRpX2dsb2IpOiBDb25zIHVwIHRoZSBjaGFpbiBvZiB0aGUgcmVzdWx0cyBvZiBnbG9iCglmcm9tIGJhY2sgdG8gZnJvbnQsIHNvIGl0IGNvbWVzIG91dCBpbiBmb3J3YXJkIG9yZGVyLgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBEb24ndCBlYXQgY2hhciBmb2xsb3dpbmcKCWJhY2tzbGFzaC1OTC4KCk1vbiBKYW4gMTMgMTk6MTY6NTYgMTk5MiAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAYWxiZXJ0LmdudS5haS5taXQuZWR1KQoKCSogVmVyc2lvbiAzLjYyLjEuCgoJKiBkZWZhdWx0LmMgKGRlZmF1bHRfdmFyaWFibGVzKSBbdWx0cml4XTogR0VUPWdldCwgbGlrZSBVU0cuCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFJlbW92ZSB0YWJzIGZvbGxvd2luZwoJYmFja3NsYXNoLU5MIGNvbWJvcyBpbiB0aGUgaW5wdXQgbGluZSwgc28gdGhleSBkb24ndCBzaG93IHVwIHdoZW4KCXRoYXQgbGluZSBpcyBwcmludGVkLgoKCSogcmVhZC5jIChyZWFkX21ha2VmaWxlKTogRG9uJ3QgY29sbGFwc2VfY29udGludWF0aW9ucyB0aGUgbGluZSBvbgoJaW5wdXQ7IGRvIGl0IG9uIHRoZSBjb3B5IHdlIGRvIHJlbW92ZV9jb21tZW50cyBvbi4KCUZvciBydWxlIGxpbmVzLCBjb2xsYXBzZV9jb250aW51YXRpb25zIHRoZSBsaW5lIGFmdGVyIGNob3BwaW5nCgkiO2NtZHMiIG9mZiB0aGUgZW5kLCBzbyB3ZSBkb24ndCBlYXQgY29udHMgaW4gdGhlIGNtZHMuCglHaXZlIGVycm9yIGZvciAiO2NtZHMiIHdpdGggbm8gcnVsZS4KCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBFYXQgYmFja3NsYXNoLU5MIGNvbWJvcwoJd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIGxpbmUgdG8gcmVjdXJzZSBvbiBmb3Igc2xvdywgdG9vLgoKU2F0IEphbiAxMSAwMjoyMDoyNyAxOTkyICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBhbGJlcnQuZ251LmFpLm1pdC5lZHUpCgoJKiBmaWxlLmMgKGVudGVyX2ZpbGUpOiBEb24ndCBzdHJpcCBsZWFkaW5nIGAuLydzLgoJKiByZWFkLmMgKHBhcnNlX2ZpbGVfc2VxKTogVGFrZSBuZXcgYXJnIFNUUklQOyBpZiBub256ZXJvLCBkbyBpdCBoZXJlLgoJKiBkZWZhdWx0LmMgKHNldF9kZWZhdWx0X3N1ZmZpeGVzKSwgZnVuY3Rpb24uYyAoc3RyaW5nX2dsb2IpLAoJcmVhZC5jIChyZWFkX21ha2VmaWxlKSwgcnVsZS5jIChpbnN0YWxsX3BhdHRlcm5fcnVsZSk6IENoYW5nZSBjYWxsZXJzLgoKCSogZGVmYXVsdC5jIChkZWZhdWx0X3ZhcmlhYmxlcykgW19JQk1SMl06IEZDPXhsZgoKCSogam9iLmMgKGNvbnN0cnVjdF9jb21tYW5kX2FyZ3ZfaW50ZXJuYWwpOiBUdXJuIGJhY2tzbGFzaC1OTCBhbmQKCWZvbGxvd2luZyB3aGl0ZXNwYWNlIGludG8gYSBzaW5nbGUgc3BhY2UsIHJhdGhlciB0aGFuIGp1c3QgZWF0aW5nCgl0aGUgYmFja3NsYXNoLgoKCSogbWFrZS50ZXhpbmZvIChDb3B5aW5nKTogQGluY2x1ZGUgZ3BsLnRleGluZm8sIHJhdGhlciB0aGFuCglkdXBsaWNhdGluZyBpdHMgY29udGVudHMuCgpGcmkgTm92ICA4IDIwOjA2OjAzIDE5OTEgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IE1ha2Ugc3VyZSBub3QgdG8gYm90aGVyCglwcm9jZXNzaW5nIGFuIGVtcHR5IGxpbmUuCgoJKiBWZXJzaW9uIDMuNjIuMC4KCgkqIGpvYi5jIChjb25zdHJ1Y3RfY29tbWFuZF9hcmd2X2ludGVybmFsKTogQWx3YXlzIHJlY3Vyc2UgZm9yIHNsb3c7CglzaW1wbGUgY2FzZSBkaWRuJ3QgaGFuZGxlIGZpbmRpbmcgbmV3bGluZXMuCgpUdWUgTm92ICA1IDE4OjUxOjEwIDE5OTEgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQHdvb2t1bXouZ251LmFpLm1pdC5lZHUpCgoJKiBqb2IuYyAoY29uc3RydWN0X2NvbW1hbmRfYXJndl9pbnRlcm5hbCk6IFNldCBSRVNUUCBwcm9wZXJseSB3aGVuCglzbG93OyBkb24ndCBcaWZ5IHBhc3QgYSBuZXdsaW5lLgoKRnJpIE5vdiAgMSAxOTozNDoyOCAxOTkxICBSb2xhbmQgTWNHcmF0aCAgKHJvbGFuZEBjaHVyY2h5LmdudS5haS5taXQuZWR1KQoKCSogbWFrZS5oIFtzZ2ldOiAjaW5jbHVkZSA8YWxsb2NhLmg+LgoKDAoKU2VlIENoYW5nZUxvZy4xIGZvciBlYXJsaWVyIGNoYW5nZXMuCg==